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类是AWTJava.AwtContainer类的子类,这也是AWTSwing的联系之一。绝大部分Swing组件类继承了Container类,所以Swing组件都可作为容器使用(JFrame继承了Frame类)。图12.1显示了Swing组件继承层次图。

图12.1

图12.1中绘制了Swing所提供的绝大部分组件,其中以灰色区域覆盖的组件可以找到与之对应的AWT组件;JWindowAWT中的Window相似,代表没有标题的窗口。读者不难发现这些Swing组件的类名和对应AWT组件的类型也基本一致,只要在原来的AWT组件类型前添加“J”即可,但有如下几个例外:

  • JComboBox:对应于AWT里的Choice组件,但比Choice组件功能更丰富。
  • JFileChooser:对应于AWT里的FileDialog组件。
  • JScrollBar:对应于AWT里的Scrollbar组件,注意两个组件类名中b字母的大小写差别
  • JCheckBox:对应于AWT里的Checkbox组件,注意两个组件类名中b字母的大小写差别。
  • JCheckBoxMenuitem:对应于AWT里的CheckboxMenuitem组件,注意两个组件类名中b字母的大小写差别。

上面JCheckBoxJCheckBoxMenuitemCheckboxCheckboxMenuitem的差别主要是由早期Java命名不太规范造成的。

Swing中的重量级组件

从图12.1中可以看出,Swing中包含了4个组件直接继承了AWT组件,而不是从JComponent派生的,它们分别是:JFrameJWindowJDialogJApplet,它们并不是轻量级组件,而是重量级组件(需要部分委托给运行平台上GUI组件的对等体)。

Swing组件分类

Swing组件按功能来分,又可分为如下几类

  • 顶层容器:JFrameJAppletJDialogJWindow
  • 中间容器:JPanelJScrollPaneJSplitPaneJToolBar
  • 特殊容器:在用户界面上具有特殊作用的中间容器,如JInternalFrameJRootPaneJLayeredPaneJDestopPane等。
  • 基本组件:实现人机交互的组件,如JButtonJComboBoxJListJMenuJSlider等。
  • 不可编辑信息的显示组件:向用户显示不可编辑信息的组件,如JLabelJProgressBarJToolTip
  • 可编辑信息的显示组件:向用户显示能被编辑的格式化信息的组件,如JTableJTextAreaJTextField等。
  • 特殊对话框组件:可以直接产生特殊对话框的组件,如JColorChooserJFileChooser等。