Java图形用户界面基础


为 Java GUI 程序设计而设计的 API 是应用面向对象原理的绝佳范例
GUI 全称是 Graphical User Interface,简单的说是图形用户界面
GUI 只有在桌面操作系统中才存在

Swing 和 AWT

不依赖于自己 GUI 的 Swing 组件称为轻量级组件(即对系统依赖性较弱),而 AWT 组件称为重量级组件(对系统依赖性较强)
AWT 用户界面组件终究是要退出历史舞台,但是 Swing 组件不能取代 AWT 中的全部类,只能替代 AWT GUI 的组件类,AWT 辅助类在 GUI 程序设计中仍然很有用

AWT 缺点

AWT 组件最大的缺陷就是它依赖于操作系统,也就是说 AWT 程序运行在不同的操作系统上会有不同的外观和行为,这和 Java 的平台无关性是不符合的

Swing 优点

Swing 组件是在 AWT 组件上发展而来的轻量级组件,与 AWT 相比不但改进了用户界面,而且所需的系统资源更少
Swing 是纯 Java 组件,使得应用程序在不同的平台上运行时具有相同的外观和相同的行为

Java GUI API

GUI API 包含的类可以分成三个组:组件类(component class)、容器类(container class)和辅助类(helper class)
组件类是用来创建用户界面的,例如:JButton、JLable 和 JTextField
容器类是用来包含其他组件的,例如:JFrame、JPanel 和 JApplet
辅助类是用来支持 GUI 组件,例如:Graphics、Color、Font、FontMetrics 和 Dimension

组件类

Component 类的实例可以显示在屏幕上,是包括容器类的所有用户界面类的根类
JComponent 类是所有轻量级 Swing 组件类的根类
Component 类和 JComponent 类都是抽象类

容器类

一个 Container 的实例可以包含 Component 实例
容器类是用于盛装其他 GUI 组件的 GUI 组件

1
2
3
4
5
6
        容器类                                                          说  明
java.awt.Container 用于对组件分组。框架 Frame、面板 Panel 和 applet 都是它的子类
java.swing.JFrame 一个不能包含在另一个窗口中的窗口。在 Java GUI 应用程序中,它用于存放其他 Swing 用户界面组件
java.swing.JPanel 一个存放用户界面组件的不可见的容器。面板可以嵌套。可以将面板放在包含面板的容器中。JPanel 也可用作画图的画布
java.swing.JApplet Applet 的一个子类。必须扩展 JApplet 才能创建基于 Swing 的 Java appet
java.swing.JDialog 一个弹出式窗口或消息框,一般用作接收来自用户的附加信息或通知事件发生的临时窗口

GUI 辅助类

辅助类都不是 Component 的子类,它们用来描述 GUI 组件的属性,例如:图形的内容、颜色、字体以及大小尺寸等

1
2
3
4
5
6
7
        辅助类                                                          说  明
java.awt.Graphics 一个抽象类,提供绘制字符串、线和简单几何图形的方法
java.awt.Color 处理 GUI 组件的颜色
java.awt.Font 指定 GUI 组件上文本和图形的字体
java.awt.FontMetrics 一个获取字体属性的抽象类
java.awt.Dimension 将组件的宽度和高度(以整数为精度)封装在单个对象中
java.awt.LayoutManager 指定组件在容器中如何放置

框架

创建一个用户界面需要创建一个框架或一个 applet 来存放用户界面组件

布局管理器

可以动态地改变布局管理器的属性
FlowLayout(流式布局)具有属性 alignment、hgap 和 vgap,可以使用 setAlignment、setHgap 和 setVgap 方法来表明对齐方式、水平间隔和垂直间隔
GridLayout(网格布局)具有属性 rows、columns、hgap 和 vgap,可以使用 setRows、setColums、setHgap 和 setVgap 方法来指定行数、列数以及水平间隔和垂直间隔
BorderLayout(边界布局)具有属性 hgap 和 vgap,可以使用 setHgap 和 setVgap 方法来指定水平间隔和垂直间隔
框架默认的布局是 BorderLayout,所以在框架中想要使用 BorderLayout,可以不进行指定,直接使用即可,JPanel 默认的布局是FlowLayout 即流式布局

Swing GUI 组件的公共特性

Component 类是所有 GUI 组件和容器的根,所有 Swing GUI 组件(除了 JFrame、JApplet 和 JDialog)都是 JComponent 的子类

Swing GUI 组件常用的操作方法

Swing GUI 组件常用的操作方法
所有 Swing GUI 组件都继承 Component、Container 和 JComponent 的公共方法


 Comments