技术开发 频道

增强图形用户界面的可访问性

  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 的类来定义一种新的主题。

  图 1 和 图 2 显示了来自SwingSet演示程序的两个屏幕截图,这个演示程序是随JSDK一起提供的。这两个图演示了不同的主题是如何改变一个应用程序的外观的,而且,这里的应用程序使用的是同一个look-and-feel。

  图 1. 默认的主题

  图 2. 高对比度主题

  因此,定制Metal look and feel 很容易,只需:

  创建一个新的扩展 javax.swing.plaf.metal.MetalTheme 的类,或者创建 javax.swing.plaf.metal.MetalTheme 的默认实现 javax.swing.plaf.metal.DefaultMetalTheme (参见 参考资料部分中给出的Java API文档的参考提示)。

  重载这个主题类的 getXXXFont() 或者 getXXXColor() 方法,使这两个方法能返回在新主题中需要用到的字体或颜色。

  通过调用 MetalLookAndFeel.setCurrentTheme(theme) 静态方法设置Metal look and feel中的新主题。

  javax.swing.plaf.metal.MetalTheme 的Java API文档(参见 参考资料)表明,您可以重载大约50个不同的方法,在一个细粒度的程度上定义必须使用的颜色和字体。不幸的是,大部分的这些方法都没有相应的文档,这使得测试每个方法以检查它对用户界面的影响这样的一项任务相当烦人。

  幸运的是,您通常不需要重载所有这些方法便可以得到一个可接受的结果――如果 vax.swing.plaf.metal.MetalTheme 提供了众多的方法,那么它的默认实现 javax.swing.plaf.metal.DefaultMetalTheme 也会以一致的方式实现大部分的这些方法,这样一来这些方法就会返回以下方法中某个方法的结果:

  getBlack()

  getWhite()

  getPrimary1()

  getPrimary2()

  getPrimary3()

  getSecondary1()

  getSecondary2()

  getSecondary3()

  getControlTextFont()

  getMenuTextFont()

  getSubTextFont()

  getSystemTextFont()

  getUserTextFont()

  getWindowTitleFont()

  因而,继承 javax.swing.plaf.metal.DefaultMetalTheme 和重载这8种颜色及6种字体通常就足以获得一个一致的新主题。

  不用硬编码这些方法(Java平台提供的主题中就是硬编码的),相反,一个好主意是实现一个能返回在外部资源文件中指定的颜色和字体的通用的主题。通过这种方式,我们可以轻易地定义一个新主题――我们只需要使用任何文本编辑器编辑一些值。

0
相关文章