12.2 Swing基本组件的用法 12.2.1 Java的Swing组件层次
12.2 Swing基本组件的用法
前面已经提到,Swing为所有的AWT组件提供了对应实现(除Canvas组件之外,因为在Swing中无须继承Canvas组件),通常在AWT组件的组件名前添加“J”就变成了对应的Swing组件。
12.2.1 Java的Swing组件层次
大部分Swing组件都是JComponent抽象类的直接或间接子类(并不是全部的Swing组件)JComponent类定义了所有子类组件的通用方法,JComponent类是AWT里Java.AwtContainer类的子类,这也是AWT和Swing的联系之一。绝大部分Swing组件类继承了Container类,所以Swing组件都可作为容器使用(JFrame继承了Frame类)。图12.1显示了Swing组件继承层次图。

图12.1中绘制了Swing所提供的绝大部分组件,其中以灰色区域覆盖的组件可以找到与之对应的AWT组件;JWindow与AWT中的Window相似,代表没有标题的窗口。读者不难发现这些Swing组件的类名和对应AWT组件的类型也基本一致,只要在原来的AWT组件类型前添加“J”即可,但有如下几个例外:
- JComboBox:对应于- AWT里的- Choice组件,但比- Choice组件功能更丰富。
- JFileChooser:对应于- AWT里的- FileDialog组件。
- JScrollBar:对应于- AWT里的- Scrollbar组件,注意两个组件类名中b字母的大小写差别
- JCheckBox:对应于- AWT里的- Checkbox组件,注意两个组件类名中b字母的大小写差别。
- JCheckBoxMenuitem:对应于- AWT里的- CheckboxMenuitem组件,注意两个组件类名中b字母的大小写差别。
上面JCheckBox和JCheckBoxMenuitem与Checkbox和CheckboxMenuitem的差别主要是由早期Java命名不太规范造成的。
Swing中的重量级组件
从图12.1中可以看出,Swing中包含了4个组件直接继承了AWT组件,而不是从JComponent派生的,它们分别是:JFrame、JWindow、JDialog和JApplet,它们并不是轻量级组件,而是重量级组件(需要部分委托给运行平台上GUI组件的对等体)。
Swing组件分类
将Swing组件按功能来分,又可分为如下几类
- 顶层容器:JFrame、JApplet、JDialog和JWindow。
- 中间容器:JPanel、JScrollPane、JSplitPane、JToolBar等
- 特殊容器:在用户界面上具有特殊作用的中间容器,如JInternalFrame、JRootPane、JLayeredPane和JDestopPane等。
- 基本组件:实现人机交互的组件,如JButton、JComboBox、JList、JMenu、JSlider等。
- 不可编辑信息的显示组件:向用户显示不可编辑信息的组件,如JLabel、JProgressBar和JToolTip。
- 可编辑信息的显示组件:向用户显示能被编辑的格式化信息的组件,如JTable、JTextArea和JTextField等。
- 特殊对话框组件:可以直接产生特殊对话框的组件,如JColorChooser和JFileChooser等。