在1.4.2 版之前,J2SE包括了3种可插式look-and-feel (PLAF)设计:
Windows:模仿 Windows 2000 操作系统(由于许可限制,PLAF只能在Windows平台下使用)。
Motif:模仿Motif应用程序。
Metal:使用它自己的独立于任何现有操作系统的look-and-feel。
J2SE 1.4.2 提供了两种附加的look-and-feel 设计。John Zukowski在他的 Merlin的魔力 专栏中的“J2SE 1.4.2 gets two new look-and-feel designs” 一文(参见 参考资料)中描述了这两种设计。这两种新的look-and-feel设计是:
Windows XP:模仿Windows XP操作系统(只能用在Windows平台下)。
GTK+:模仿Linux下的GTK应用程序。
感觉好不如看起来好
对于大多数人来说,应用程序的look-and-feel只不过是一种偏好和欣赏。但是在某些情况下,有必要定制应用程序的look-and-feel,使其使用特定的字体、颜色模式或图标。例如,有些弱视用户常常要求look-and-feel在文本与背景之间具有高对比度,同时还要有大的字体和图标。"IBM Java Accessibility Checklist" (参见 参考资料)规定,一个应用程序中的所有用户界面对象都必须支持高对比度设置。
Java 平台早期的版本对颜色和字体的偏好设置的支持不是很好。从J2SE 1.4开始,尤其是随着J2SE 1.4.2中新的Windows XP 和 GTK look-and-feel设计的引入,用户现在可以配置他们想要的look-and-feel设计。Windows look-and-feel试图使用Windows平台底层的颜色和字体模式,而GTK look and feel则使得Linux用户能够通过定义一些脚本来定制look-and-feel。
乍一看来,“本地的” look-and-feel 设计的改进使得Metal look and feel失去了作用。然而在有些场合中,Metal look-and-feel(或者其定制版本)仍然比较有用。例如:
如果您需要的是能够在任何平台下运行,并且即使是被一个未签名的applet使用时也是可定制的这样一种look-and-feel。
如果您需要更多其他look-and-feel设计不能提供的定制能力。
如果您使用的是Java平台的一个早期版本,而这种版本最近的改进不可用。
本文将解释如何修改Metal look-and-feel,使其使用特定的字体和颜色模式。您还将学习如何修改用于绘制窗口小部件(例如复选框、单选按钮、树以及文件对话框)的图标。
首先我将解释如何重载用于look-and-feel的颜色和字体。接着我们将看看如何修改标准窗口小部件所使用的图标。最后,我们将看一个新look-and-feel的实例,在这个实例中您可以在一个文本文件中定义对颜色、字体和图标大小的设置。以后您就可以使用我们的例子来创建高对比度的look-and-feel。
重载 Metal look and feel —— 修改颜色和字体
javax.swing.plaf.metal.MetalLookAndFeel 类是 Metal look and feel的主类。这个类的Java API 文档(参见 参考资料)表明,这个类中定义的大部分方法都是getter方法,用以返回画Swing框架中提供的不同窗口小部件时所用的颜色和字体。然而,这些getter方法返回值的任务并不是直接在这个类中实现的,而是委托给了另一个类,这个类叫做一个 主题(theme)。主题惟一的作用就是提供要使用的颜色和字体的值。
Metal look and feel 使用一种可插式主题体系结构。这种look and feel 本身 ( javax.swing.plaf.metal.MetalLookAndFeel ) 定义了窗口小部件的外观以及它们对用户交互的反应,而主题则定义在绘制窗口小部件时应该使用的颜色和字体。您可以通过创建一个新的继承 javax.swing.plaf.metal.MetalTheme 的类来定义一种新的主题。