12.2.2 AWT组件的Swing实现

12.2.2 AWT组件的Swing实现

从图121中可以看出,Swing为除Canvas之外的所有AWT组件提供了相应的实现,Swing组件比AWT组件的功能更加强大。相对于AWT组件,Swing组件具有如下4个额外的功能。

  1. 可以为Swing组件设置提示信息。使用setToolTipText()方法,为组件设置对用户有帮助的提示信息。
  2. 很多Swing组件如按钮、标签、菜单项等,除使用文字外,还可以使用图标修饰自己。为了允许在Swing组件中使用图标,SwingIcon接囗提供了一个实现类:ImageIcon,该实现类代表个图像图标。
  3. 支持插拔式的外观风格。每个JComponent对象都有一个相应的ComponentUI对象,为它完成所有的绘画、事件处理、决定尺寸大小等工作。ComponentUI对象依赖当前使用的PLAF,使用UIManager.SetLookAndFeel()方法可以改变图形界面的外观风格。
  4. 支持设置边框。Swing组件可以设置一个或多个边框。Swing中提供了各式各样的边框供用户选用,也能建立组合边框或自己设计边框。一种空白边框可以用于增大组件,同时协助布局管理器对容器中的组件进行合理的布局。

UI代理类

每个Swing组件都有一个对应的UI类,例如JButton组件就有一个对应的ButtonUI类来作为UI代理。每个Swing组件的UI代理的类名总是将该Swing组件类名的J去掉,然后在后面添加UI后缀UI代理类通常是一个抽象基类,不同的PLAF会有不同的UI代理实现类。Swing类库中包含了几套UI代理,每套UI代理都几乎包含了所有Swing组件的Component实现,每套这样的实现都被称为种PLAF实现。以JButton为例,其UI代理的继承层次如图12.2所示。
这里有一张图片

如果需要改变程序的外观风格,则可以使用如下代码。

1
2
3
4
5
6
7
8
9
try{
//设置使用 Windows风格
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.windowsLookAndFeel");
// 通过更新f容器以及f容器里所有组件的UI
SwingUtilities.updateComponentTreeUI(f);
}
catch(Exception e){
e.printstackTrace();
}

程序 Swing窗口

下面程序示范了使用Swing组件来创建窗口应用,该窗口里包含了菜单、右键菜单以及基本AWT组件的Swing实现。