Java图形用户界面程序设计
- 前言
- 一、图形用户界面程序设计的概述
-
- GUI概述
- [Java GUI技术的发展](#Java GUI技术的发展)
- 二、AWT概述
- 三、Swing概述
前言
推荐一个网站给想要了解或者学习人工智能知识的读者,这个网站里内容讲解通俗易懂且风趣幽默,对我帮助很大。我想与大家分享这个宝藏网站,请点击下方链接查看。
https://www.captainbed.cn/f1
通常情况下,java语言一般是用来开发后台程序的,所谓的后台程序就是部署在服务器端的程序,默默的工作,用户是看不到任何界面的,所以很多情况下,学习java会感觉很枯燥。
事实上,我们使用java语言同样可以完成图形化界面程序的开发,而学习图形化界面编程相对来说就会有趣很多,因为所见即所得,也就是说,我们写的大部分代码的执行效果,是可以通过图形化界面实实在在能够看得到的。
java使用AWT和Swing相关的类可以完成图形化界面编程,其中AWT的全称是抽象窗口工具集(Abstract Window Toolkit),它是sun公司最早提供的GUI库,这个GUI库提供了一些基本功能,但这个GUI库的功能比较有限,所以后来sun公司又提供了Swing库。通过使用AWT和Swing提供的图形化界面组件库,java的图形化界面编程非常简单,程序只需要依次创建所需的图形组件,并以合适的方式将这些组件组织在一起,就可以开发出非常美观的用户界面。
一、图形用户界面程序设计的概述
GUI概述
程序使用者与程序之间进行的交互操作和信息交换,都必须借助程序的用户界面。程序的用户界面大致可分为两种:命令行用户界面(Command Line Interface, CLI) 和图形用户界面(Graphical User Interface, GUI)。其中,GUI 以图形形式的窗体代表应用程序;在窗体、对话框等容器上添加菜单、按钮等标准图形元素,组成直观的用户界面;
程序的结果同样是图形形式输出。GUI 程序在操作上往往借助鼠标、键盘发送命令、启动操作。正因为 GUI 既在视觉上给用户舒适的感觉,又使得操作简单,所以成为主流的程序用户界面。
在Java 程序设计中,可通过三种途径实现 GUI:调用Java提供的相关类和接口编写代码,使用配置文件(譬如 XML 配置文件),借助可视化编辑环境(如 Window Builder)。就本质上而言,后两种途径都以第一种途径为基础:在后续的学习中,主要介绍第一种途径。
Java GUI技术的发展
Java提供了强大而丰富的GUI编程支持,利用这些技术可以轻而易举地开发出高效率的、便于操作的GUI程序。Java的图形用户界面技术经历了3个发展阶段:AWT(Abstract User Intertace) 技术、Swing 技术和JavaFX技术。JavaFX融入了现代GUI技术,方便开发在台式计算机、手持设备和 Web 上跨平台的富因特网应用 (RIA)。即便如此,掌握AWT 和 Swing 技术,仍然是开发 Java GUI程序的基本要求。
AWT, 通常被翻译为"抽象窗口工具包",是Java 提供用来建立和设置图形用户界面的基本工具。这些所谓的"工具"被抽象并归类为 java.awt
包中的类和接口,主要包括用户界面组件类(包括容器类、组件类)、布局管理器、图形和图像工具(包括形状、颜色和字体类)等。
AWT在实际的运行过程中需要调用所在平台的图形系统,并且受其影响而在不同平台下呈现出不同的外观。例如,同样的代码运行在 Windows 平台下,或者 UNIX 平台下,显示结果存在差异。根据 AWT 对平台的这种依赖性,所提供的组件被称作"重量级组件"。
为了改善 Java GUI 技术,又研发了 Swing 技术;自JDK1.2 开始,增加了新的javax.swing
包,提供了功能更齐全和更灵活的Swing 组件类。Swing 以AWT 为基础,在保留 AWT 所有功能的同时,进一步对 AWT的功能进行扩展。Swing组件的实现使用的是百分之百的Java代码,且不需调用平台的图形系统。根据 Swing对平台的这种非依赖性,所提供的组件被称为"轻量级组件"。
AWT 和 Swing 所提供的 GUI 工具都包括3个概念:组件(Component)、容器(Container)、和布局管理器(LayoutManager),每个概念对应着一个类或接口。
组件是指以图形化的方式展现,能与用户进行交互的 GUI 元素。在Java GUI中,组件是最基本的单位;常见的组件有标签、文本框、按钮等。在 AWT和 Swing中,提供了Component 类、JComponent 类及它们的子类,这些类实例化后的对象就是生成的相应组件。然而,组件并不能独立地显示,必须将其放置在容器中。
容器是指能够容纳组件(或者其他容器)的一种特殊组件,并使它们成为一个整体。在AWT 和 Swing中,提供了 Container 类及其子类,这些类实例化后的对象就是生成的相应容器。Container 类的父类是 Component,因此容器也可以是一个组件,具有组件的所有性质。使用容器组织其他组件对象,能够实现设计的灵活性,也能以整体结构来布置界面。
布局管理器是指用来设置容器中布局的组织管理方式。容器中的各个组件之间的位置、大小关系就是布局;在 AWT 和 Swing 中,提供了 LayoutManager
接口及其实现类来管理布局。每个容器在实例化时都实现了一个布局管理器实例,不同的容器有不同的默认布局管理器。使用布局管理器生成的GUI具有良好的平台无关性。
完成 GUI应用程序所应具备的功能,除了合理使用各种容器、组件和布局管理方式产生美观的界面外,还需要进行事件处理,以达到程序与用户的交互,从而实现程序的功能。Java 语言主要在 java.awt.event
包提供了AWT 组件和 Swing组件所激发的各类事件的接口和类,用来检测并对事件做出反应。
综上所述,AWT和 Swing 以类(或接口)的形式提供了丰富的GUI工具,所以重点是掌握这些类(接口)的使用。容器类实例化得到容器对象,用于容纳所有其他 GUI组件的载体;布局管理器类实例化布局管理器对象,调用容器对象的成员方法 setLayout()
设置布局方式为布局管理器对象;组件类实例化得到组件对象,调用容器对象的成员方法add()
将组件对象添加到容器对象中。针对不同组件激发的不同事件,定义类去实现相应的事件监听器接口,按照"事件委托处理模型"完成事件处理。
二、AWT概述
简介
当 JDK 1.0发布时, Sun 提供了 一套基本的GUI类库,这个GUI类库希望可以在所有平台下都能运行 , 这套基本类库被称为"抽象窗口工具集 CAbstract Window Toolkit )",它为Java应用程序提供了基本的图形组件 。
AWT是窗口框架,它从不同平台的窗口系统中抽取出共同组件 , 当程序运行时,将这些组件的创建和动作委托给程序所在的运行平台 。 简而言之 ,当使用 AWT 编写图形界面应用 时, 程序仅指定了界面组件的位置和行为,并未提供真正的实现,JVM调用操作系统本地的图形界面来创建和平台 一致的对等体 。
使用AWT创建的图形界面应用和所在的运行平台有相同的界面风格 , 比如在 Windows 操作系统上,它就表现出 Windows 风格 ; 在 UNIX 操作系统上,它就表现出UNIX 风格 。 Sun 希望采用这种方式来实现 " Write Once, Run Anywhere " 的目标 。
AWT继承体系
所有和 AWT 编程相关的类都放在 java.awt
包以及它的子包中, AWT 编程中有两个基类 :Component
和 MenuComponent
。
Component
:代表一个能以图形化方式显示出来,并可与用户交互的对象,例如Button
代表一个按钮,TextField
代表 一个文本框等;MenuComponent
:则代表图形界面的菜单组件,包括MenuBar
(菜单条)、Menultem
(菜单项)等子类。
其中 Container
是一种特殊的 Component
,它代表一种容器,可以盛装普通的 Component
。
AWT中还有一个非常重要的接口叫LayoutManager
,如果一个容器中有多个组件,那么容器就需要使用LayoutManager
来管理这些组件的布局方式。
总结
AWT(Abstract Window Toolkit)是Java中用于创建图形用户界面(GUI)的一套类库。它提供了一系列的组件类,包括窗口、按钮、文本框、标签等,可以用于构建用户友好的界面。
AWT的设计理念是基于本地操作系统窗口系统的,所以它使用了操作系统提供的原生组件来渲染界面。这样可以使得AWT应用程序在不同平台上具有相似的外观和行为。
AWT提供了一套事件模型,可以处理用户按下按钮、鼠标点击等操作。开发人员可以通过注册监听器来响应这些事件,并进行相应的处理。
AWT也提供了一些布局管理器,可以用来控制组件的位置和大小。开发人员可以使用布局管理器来自动调整界面的排列,以适应不同的窗口大小。
尽管AWT是Java的一部分,但它的效率和灵活性相对较低。因此,许多Java程序员更喜欢使用Swing,它是建立在AWT之上的高级GUI工具包。Swing提供了更丰富的组件和更高的性能,使得开发人员可以创建更复杂、更具交互性的GUI应用程序。
三、Swing概述
相较于 AWT,Swing 是Java 语言中更先进的GUI技术。Swing 技术采用 MVC 体系结构,将数据的内容和显示进行分离,增加灵活性。Swing 组件新增诸多功能:实现Accessible 接口提供对可存取性的支持;可调用成员方法 registerKeyboardAction()
以键盘操作代替鼠标操作;可调用成员方法 setBorder()
设置组件外围的边框:标签、按钮等组件可以使用图标。
大多数 Swing 组件都在 javax.swing
包中;只有 javax.swing.table.JTableHeader
和javax.swing.text.JTexrComponent
两个组件是例外。Swing 组件都是轻量级组件,但是不能说 javax.swing
包中的类都是轻量级组件类,例如该包中的JFrame、JDialog、JWindow、JApplet 都不是轻量级组件类。Swing 组件类和 javax.swing
包中的类,是两个不同的范畴。Swing 组件大多以 JComponent 类作为父类(如图4-13所示);JComponent 类是一个抽象类,定义了所有子类组件的一般成员方法;而 JComponent 类继承自 Container类,所以这部分组件都可以作为容器使用。
根据图4-13 很容易发现 Swing 和 AWT有紧密的关系:其一,Swing的类都是AWT 的 Container 类的直接子类或者间接子类;其二,Swing 的类名很多是在 AWT 的某个类名前加上一个字母"J"构成:这说明 Swing对 AWT中的等同类进行了功能上的扩展。另外, JFrame、 JDialog、JApplet等3个非轻量级组件类的父类分别是AWT 包中的 Frame、Dialog、 Applet。
Swing 中常用来生成容器对象的JFrame、JDialog 和 JApplet等3个类,与AWT包中的 Frame、Dialog 和 Applet基本类似;然则,Swing 比 AWT更加强调容器的概念,容器中可以再放置容器,也可以放置组件;所以,JFrame、JDialog 和 JApplet 实例化的容器对象被称为顶层容器。JPanel 属于中间容器,和顶层容器形成容器的层次结构。
Swing概述
实际使用 Java 开发图形界面程序时 ,很少使用 AWT 组件,绝大部分时候都是用 Swing 组件开发的 。 Swing是由100%纯 Java实现的,不再依赖于本地平台的 GUI, 因此可以在所有平台上都保持相同的界面外观。独立于本地平台的Swing组件被称为轻量级组件 ;而依赖于本地平台的 AWT 组件被称为重量级组件。
由于 Swing 的所有组件完全采用 Java 实现,不再调用本地平台的 GUI,所以导致 Swing 图形界面的显示速度要比 AWT 图形界面的显示速度慢一些,但相对于快速发展的硬件设施而言,这种微小的速度差别无妨大碍。
优势
-
Swing 组件不再依赖于本地平台的 GUI,无须采用各种平台的 GUI 交集 ,因此 Swing 提供了大量图形界面组件 , 远远超出了 AWT 所提供的图形界面组件集。
-
Swing 组件不再依赖于本地平台 GUI ,因此不会产生与平台 相关的 bug 。
-
Swing 组件在各种平台上运行时可以保证具有相同的图形界面外观。
Swing 提供的这些优势,让 Java 图形界面程序真正实现了 " Write Once, Run Anywhere" 的 目标。
Swing的特征
-
Swing 组件采用 MVC(Model-View-Controller, 即模型一视图一控制器)设计模式:
-
模型(Model): 用于维护组件的各种状态;
-
视图(View): 是组件的可视化表现;
-
控制器(Controller):用于控制对于各种事件、组件做出响应 。
当模型发生改变时,它会通知所有依赖它的视图,视图会根据模型数据来更新自己。Swing使用UI代理来包装视图和控制器, 还有一个模型对象来维护该组件的状态。例如,按钮JButton有一个维护其状态信息的模型ButtonModel对象 。 Swing组件的模型是自动设置的,因此一般都使用JButton,而无须关心ButtonModel对象。
-
-
Swing在不同的平台上表现一致,并且有能力提供本地平台不支持的显示外观 。由于 Swing采用 MVC 模式来维护各组件,所以 当组件的外观被改变时,对组件的状态信息(由模型维护)没有任何影响 。因 此,Swing可以使用插拔式外观感觉 (Pluggable Look And Feel, PLAF)来控制组件外观,使得 Swing图形界面在同一个平台上运行时能拥有不同的外观,用户可以选择自己喜欢的外观 。相比之下,在 AWT 图形界面中,由于控制组件外观的对等类与具体平台相关 ,因此 AWT 组件总是具有与本地平台相同的外观 。
总结
Swing是Java的一个用户界面(UI)工具包,用于创建窗口、按钮、文本框等图形用户界面元素。它提供了一套丰富的组件,以及一些用于布局和事件处理的类和接口。
Swing是Java Foundation Classes(JFC)的一部分,它由一组独立的Java类组成,包含了一些用于创建复杂、灵活和可定制的用户界面的工具。
Swing是轻量级的,意味着它不依赖于本机操作系统的用户界面库。这使得Swing应用程序在不同平台上的外观和行为都是一致的。
通过使用Swing,开发者可以创建具有各种样式和功能的图形用户界面。Swing提供了一些常见的UI组件,如按钮、文本框、标签等,同时也支持自定义组件的创建。
Swing还提供了一些用于布局和控制组件的类和接口。开发者可以使用这些工具来创建和管理复杂的用户界面。同时,Swing还提供了一些用于事件处理的类和接口,使开发者能够对用户交互做出相应。
总而言之,Swing是Java中用于创建图形用户界面的工具包,提供了丰富的组件和工具,使开发者能够轻松创建强大、灵活和可定制的用户界面。