在本章的一开始就提到过JDK 中针对GUI 提供的API 包括AWT 和Swing。前面的小节都是针对AWT 组件进行讲解,接下来针对Swing 组件进行讲解。相对于AWT 来说,Swing包中提供了更加丰富、便捷、强大的GUI 组件,而且这些组件都是Java 语言编写而成的,因此,Swing 组件不依赖于本地平台,可以真正做到跨平台运行。通常来讲,把依赖于本地平台的AWT 组件称为重量级组件,而把不依赖本地平台的Swing 组件称为轻量级组件。
学习Swing 组件的过程和学习AWT 差不多,大部分的Swing 组件都是JComponent 类的直接或者间接子类,而JComponent 类是AWT 中java.awt.Container 的子类,说明Swing 组件和AWT 组件在继承树上形成了一定的关系。接下来通过一张继承关系图来描述一下AWT 和Swing 大部分组件的关联关系,如图9.14 所示。
图9.14 Swing 组件继承关系图
图9.14 展示了一些常用的Swing 组件,不难发现,这些组件的类名和对应的AWT 组件类名基本一致,大部分都是在AWT 组件类名的前面添加了“J”,但也有一些例外,比如Swing的JComboBox 组件对应的是AWT 中的Choice 组件(下拉框)。
另外还可以看出,Swing 中有三个组件是继承了AWT 的Window 类,而不是继承自JComponent 类,它们分别是JWindow、JFrame 和JDialog,这三个组件是Swing 中的顶级容器,它们都需要依赖本地平台,因此被称为重量级组件。其中,JWindow 和AWT 中的Window一样很少被使用,一般都是用JFrame 和JDialog。
1. JFrame
在Swing 组件中,最常见的一个就是JFrame,它和Frame 一样是一个独立存在的顶级窗口,不能放置在其他容器之中,JFrame 支持通用窗口所有的基本功能,例如窗口最小化、设定窗口大小等。
【例9.15】下面通过案例来演示一下JFrame 的效果,如文件9-15 所示。
文件9-15 Example15.java
执行结果
图9.15 【例9.15】执行结果
2. JDialog
JDialog 是Swing 的另外一个顶级窗口,它和Dialog 一样都表示对话框。JDialog 对话框可分为两种:模态对话框和非模态对话框。所谓模态对话框是指用户需要等到处理完对话框后,才能继续与其他窗口交互的对话框;而非模态对话框是允许用户在处理对话框的同时与其他窗口交互的对话框。(www.xing528.com)
对话框是模态或者非模态,可以在创建JDialog 对象时为构造方法传入参数来设置,也可以在创建JDialog 对象后调用它的setModal()方法来进行设置。JDialog 类的常用构造方法如表9-6 所示。
表9-6 JDialog 类的常用构造方法
表9-6 列举了JDialog 三种常用的构造方法,这三种构造方法都需要接收一个Frame 类型的对象,表示对话框所有者,如果该对话框没有所有者,参数owner 可以传入null。在第三种构造方法中,参数modal 用来指定JDialog 窗口是模态还是非模态,如果modal 值设置为true,对话框就是模态对话框;反之则是非模态对话框。如果不设置modal 的值,其默认值为false,也就是非模态对话框。
【例9.16】下面通过一个案例来学习如何使用JDialog 对话框,如文件9-16 所示。
文件9-16 Example16.java
执行结果
图9.16 【例9.16】执行结果
3. 中间容器
Swing 组件中不仅具有JFrame 和JDialog 这样的顶级窗口,还提供了一些中间容器,这些容器不能单独存在,只能放置在顶级窗口中。其中,最常见的中间容器有两种:JPanel 和JScrollPane,具体介绍如下。
(1)JPanel:JPanel 和AWT 中的Panel 组件使用方法基本一致,它是一个无边框,不能被移动、放大、缩小或者关闭的面板,它的默认布局管理器是FlowLayout。当然也可以使用JPanel 带参数的构造函数JPanel(LayoutManager layout)或者它的setLayout()方法为其制定布局管理器。
(2)JScrollPane:与JPanel 不同的是,JScrollPane 是一个带有滚动条的面板容器,而且这个面板只能添加一个组件,如果想在JScrollPane 面板中添加多个组件,应该先将组件添加到JPanel 中,然后将JPanel 添加到JScrollPane 中。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。