良好图形用户界面(Graphical User Interface ,简称GUI):用户通过鼠标对软件的窗口、菜单、列表框、对话框等图形组件进行操作,可以方便地使用软件。
Java对GUI的支持包括基本控件、界面容器事件机制、布局设计、图形和图像等,并提供了大量的类用于实现界面设计,主要有AWT工具集和Swing工具集。
抽象窗口工具集(AWT)
AWT是Abstract Window Toolkit 的缩写,称为抽象窗口工具集,开发图形界面的应用程序时,需要用到AWT。AWT是Java开发工具包(JDK)的一部分,是Java基本类(JFC)的核心。AWT的作用是给用户提供基本的界面组件,如窗口、按键、菜单等。此外,AWT还提供事件处理结构,支持剪贴板、数据传输和图像操作。
AWT中类与类之间的关系如下图,AWT由 java. awt包提供,该包中有许多用来设计用户界面的类和接口,用户可在Java Application或Applet 中进行GUI设计。AWT包含四个主要的类:组件(Component)类、容器(Container)类、图形 ( Graphics)类和布局管理器( LayoutManager)类。
Swing组件简介
.Swing组件由javax. swing包提供,是内容丰富、功能强大的轻量级组件。Swing 组件与AWT组件不同,显示及事件处理等工作都由Java编写的UI类来完成。轻量级组件占用资源较少,效率较高,显示外观与平台无关,功能更强、更灵活。Swing组件是纯Java语言实现的,并不依赖本地的工作平台,Swing具有和AWT同性质的组件,如按钮等。从命名的角度看,Swing组件的名称都以字母“J”作为首字母,如AWT 按钮组件命名为Button,而Swing的按钮组件命名为JButton。Swing组件的结构如下图所示。Swing还定义了其他应用组件,如树组件、表组件和列表组件等。
这两个组件的区别:
( 1 ) Swing标签和按钮可以显示文本和图片,AWT中同性质的组件只能显示文本。
(2)用户可以定义Swing组件的外观,而AWT组件的外观取决于本地操作系统。
(3 ) Swing具有良好的可扩展性,用户可以扩展或自定义组件,而AWT组件的扩展性较差。
JComponent组件:
JComponent类是java. awt包中容器类Container 的子类,因此所有继承自JComponent类的轻量级组件也都是容器。注意,不能把组件直接添加到Swing窗体中,应当把组件添加到Swing窗体所包含的一个称为内容面板的容器中。在Swing窗体的内容面板中,尽量只使用轻量组件,否则可能会出现意想不到的问题。Swing窗体通过调用public Container getCon-tentPane()方法获取它的内容面板。
JFrame组件
JFrame组件是与AWT中的Frame组件相对应的Swing 组件,继承自java awt. Frame类,功能与Frame组件类似。JFrame中只能有一个组件JRootPane,调用JFrame. getContentPane( )方法可获得JFrame中内置的JRootPane对象,应用程序不能直接在JFrame实例对象上增加组件和设置布局管理器,应该在.JRootPane对象上增加子组件和设置布局管理器。JDK5.0之后,重写了add ( Component comp)和setLayout . ( LayoutManager l)方法,直接调用这两个方法也可以操作JContentPane对象。当用户单击JFrame的关闭按钮时,JFrame会自动隐藏,但没有关闭,可以在windowClosing事件中关闭,更常用的关闭方式是调用JFrame的相应方法。
SWing 工具集的其他常用组件
1. JLabel组件
标签组件用于显示文本信息、图标或二者的组合。JLabel组件不响应用户的输入,即JLabel组件不能编辑。JLabel组件可以将内容垂直或水平显示,通常默认文本信息的显示状态为水平,而图标的显示状态为垂直。标签组件一般用于提示信息。
2.JTextField组件
JTextField组件用于创建文本框,文本框位于接受单行文本信息输入的区域,通常用于接受用户信息或其他文本信息的输入。当用户输入文本信息后,如果为JTextField对象添加了事件处理,按回车键会触发一定的动作。JPasswordField是JtextField的子类,是一种特殊的文本框,也位于接受单行文本信息输入的区域,但会用回显字符串代替输入的文本信息。JPasswordField组件也称为密码文本框,JPasswordField 默认的回显字符是“*”,用户可以自行设置回显字符。
3. JTextArea组件
JTextArea组件是文本区组件,与JTextField组件一样能接受文本信息的输入和显示。与JTextField组件不同的是,JTextArea对象可以实现文本多行输入和显示,突破了JTextField组件单行输入的限制。但是,如果文本信息的行数超过文本区限定的行数,超出的文本信息不能显示,为了解决这个问题,可以借助JScrollPane滚动窗格组件。将文本区放置到滚动窗格中,即可实现超出文本信息的滚动输出,实现语法为: new JScrollPane (JTextArea文本区对象)。
4. JButton组件
JButton组件用于创建按钮,当用户按下按钮时会触发一定的动作。JButton组件创建的按钮可以显示图标和文本信息,用于有效地提示及帮助用户操作。
5.复选框和单选框
JCheckBox 组件用于创建具有文本和图标的复选框,这种复选框具有“选中”和“取消选中”两种状态,通过用户的选择实现转换。通常,用多个复选框作为一组组合条件,用户可以同时选择多个复选框。
JRadioButton组件用于创建具有文本和图标的单选按钮,和JCheckBox组件一样,具有“选中”和“取消选中”两种状态。可以定义一个或多个单选按钮并添加到一个 Button-Group按钮组作为整体进行处理。在任何情况下,一个按钮组中只能有一个单选按钮处于“选中”状态。因此,通常定义包含多个单选按钮的按钮组实现在多个条件中选择一个的功能。
6. JComboBox组件
JComboBox 组件用于创建组合框对象,根据组合框是否可编辑的状态,可以将组合框分成两种常见的外观。可编辑状态下的外观视为文本框和下拉列表的组合,不可编辑状态下的外观可视为按钮和下拉列表的组合。在按钮或文本框的右边有一个带有下三角符号的下拉按钮。通过单击该下拉按钮,可以出现一个内容列表。组合框通常用于从列表的“多个项目中选择一个”的操作。
7. JList组件
JList组件用于定义列表,允许用户选择一个成多个项目,与JTextArea类似,JList本身不支持滚动条功能。