Java图形用户界面程序设计所需要使用的工具

Java图形用户界面程序设计


前言

推荐一个网站给想要了解或者学习人工智能知识的读者,这个网站里内容讲解通俗易懂且风趣幽默,对我帮助很大。我想与大家分享这个宝藏网站,请点击下方链接查看。
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 编程中有两个基类 :ComponentMenuComponent

  • 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.JTableHeaderjavax.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 图形界面的显示速度慢一些,但相对于快速发展的硬件设施而言,这种微小的速度差别无妨大碍。

优势

  1. Swing 组件不再依赖于本地平台的 GUI,无须采用各种平台的 GUI 交集 ,因此 Swing 提供了大量图形界面组件 , 远远超出了 AWT 所提供的图形界面组件集。

  2. Swing 组件不再依赖于本地平台 GUI ,因此不会产生与平台 相关的 bug 。

  3. Swing 组件在各种平台上运行时可以保证具有相同的图形界面外观。

​ Swing 提供的这些优势,让 Java 图形界面程序真正实现了 " Write Once, Run Anywhere" 的 目标。

Swing的特征

  1. Swing 组件采用 MVC(Model-View-Controller, 即模型一视图一控制器)设计模式:

    • 模型(Model): 用于维护组件的各种状态;

    • 视图(View): 是组件的可视化表现;

    • 控制器(Controller):用于控制对于各种事件、组件做出响应 。

    当模型发生改变时,它会通知所有依赖它的视图,视图会根据模型数据来更新自己。Swing使用UI代理来包装视图和控制器, 还有一个模型对象来维护该组件的状态。例如,按钮JButton有一个维护其状态信息的模型ButtonModel对象 。 Swing组件的模型是自动设置的,因此一般都使用JButton,而无须关心ButtonModel对象。

  2. 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中用于创建图形用户界面的工具包,提供了丰富的组件和工具,使开发者能够轻松创建强大、灵活和可定制的用户界面。


相关推荐
栈老师不回家11 分钟前
Vue 计算属性和监听器
前端·javascript·vue.js
芊寻(嵌入式)12 分钟前
C转C++学习笔记--基础知识摘录总结
开发语言·c++·笔记·学习
WaaTong14 分钟前
《重学Java设计模式》之 原型模式
java·设计模式·原型模式
m0_7430484414 分钟前
初识Java EE和Spring Boot
java·java-ee
AskHarries16 分钟前
Java字节码增强库ByteBuddy
java·后端
前端啊龙17 分钟前
用vue3封装丶高仿element-plus里面的日期联级选择器,日期选择器
前端·javascript·vue.js
一颗松鼠21 分钟前
JavaScript 闭包是什么?简单到看完就理解!
开发语言·前端·javascript·ecmascript
泉崎22 分钟前
11.7比赛总结
数据结构·算法
有梦想的咸鱼_23 分钟前
go实现并发安全hashtable 拉链法
开发语言·golang·哈希算法
你好helloworld23 分钟前
滑动窗口最大值
数据结构·算法·leetcode