IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope:Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  Java technology  >

Merlin的魔力: J2SE 1.4.2 提供两种新的外观设计

GTK+ 和 Windows XP 联合 Windows Classic、Motif 和 Metal

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


级别: 初级

John Zukowski (jaz@zukowski.net), 总裁, JZ Ventures, Inc

2003 年 7 月 28 日

为了满足用户桌面的最新和最佳需求,Sun更新了一组由J2SE 1.4平台提供的标准外观设计。在 Merlin的魔力这一部分,John Zukowski使用最新的1.4.2版本(此时正在测试)来向Windows用户展示如何获得Windows XP的新款外观,以及Linux桌面的GTK+外观。请在附带的 讨论论坛中与作者和其他读者一起分享您有关本文的心得体会(您也可以点击文章顶部或底部的 讨论来访问论坛)。

迄今为止,所有Merlin的魔力专栏都是关于Java 1.4版本的新特性,本文主要针对目前正在测试的1.4.2版本。Sun认为Windows的经典外观已经过时,没有人再使用Motif了 -- 至少在用户桌面上。您将在这一标准Java平台的最新版本中找到新款Windows外观以及称为GTK+的全新外观,当用户使用Windows XP操作系统时新款Windows外观看起来象Windows XP,GTK+使用普通Linux桌面的外观。

Swing架构提供可插入外观框架。例如,该框架提供一种标准方法使所有组件的字体为8-point bold Lucida,无需更改所有调用来创建一个组件。您只需插入新的设置到外观中,像魔法一样,所有调用都自动拾取这些更改。您甚至可以通过设置外观来改变GUI的整体风格。以前,J2SE 1.4 为以平台为导向的UI提供外观设计,如Microsoft Windows 和 Motif。它还提供专门面向Java平台的称为Metal的交叉平台UI,无论用户使用什么桌面,它看起来都是千篇一律。

更改外观设计

在我们检验最新的外观设计之前,我们先展示如何更改一个Java程序的外观,如表1所示:


表1:查找所有显示模式
  import java.awt.*;
  import javax.swing.*;
  public class Start extends JFrame {
    public Start() {
      setDefaultCloseOperation(EXIT_ON_CLOSE);
      Container c = getContentPane();
      JButton button = new JButton("Hello");
      c.add(button, BorderLayout.CENTER);
      setSize(100, 50);
      show();
    }
    public static void main(String[] args) {
      try {
      UIManager.setLookAndFeel(
        UIManager.getCrossPlatformLookAndFeelClassName());
        //UIManager.getSystemLookAndFeelClassName());
      } catch (Exception e) { 
      }
      new Start();
    }
  }

UIManagersetLookAndFeel() 调用允许您进入新外观设计完全标准化的类名中。您再也无须担心哪个类名适用于交叉平台Metal UI ( javax.swing.plaf.metal.MetalLookAndFeel) ,您只需使用 getCrossPlatformLookAndFeelClassName() 方法向系统询问名字。另一方面, getSystemLookAndFeelClassName() 将返回专用于用户桌面的UI类名。如果用户在Windows设备上运行该程序,他将通过 com.sun.java.swing.plaf.windows.WindowsLookAndFeel 类获得Windows UI。在UNIX设备上,将返回Motif/CDE接口或 com.sun.java.swing.plaf.motif.MotifLookAndFeel 类。J2SE 1.4.2提供新GTK+外观,但不返回作为UNIX机器的系统外观类。这种情况将在J2SE 1.5版本中得到改善。图1显示了当在Windows 2000设备上运行时Start程序的输出外观:


图1:交叉平台UI
Cross Platform UI

Windows XP和UNIX用户将发现系统外观稍微有些不同,如图2所示:


图2:Windows经典UI
Windows Classic UI

注意:Apple的Java版本的Macintosh用户将获得一个Aqua外观。

正如前面所述,Windows 2000用户将看到一个UI,Windows XP用户将看到另外一个UI。新Windows XP不能提供一组完整的外观类。实际上,现有的一组Windows UI类将为非XP用户显示Microsoft Windows的经典版本,为Windows XP用户显示Windows XP版本。如下所示,设置系统属性 swing.noxp 将为Windows XP用户提供获得更经典的Windows界面的方法。非-XP Windows用户无法获得新款XP界面。

java -Dswing.noxp=true Start





回页首


GTK+ UI

虽然新款Windows XP体验只是修改后的Windows外观,但GTK+ UI是一种全新设计,它基于GTK+ 2.0 (见 参考资料关于 GTK+ 2.0信息的链接)。非-Linux用户将有可能发现这一全新的名称。您可以把它作为典型Linux桌面UI体验来考虑(当然,它不是目前唯一可用的UI)。用户可以定制 GTK+的许多部分,将配置文件放在特殊的位置,桌面的外观将相应地发生变化。此外,多文件接口(multi-document interface,MDI) -- 在Swing中称为 JInternalFrame&#160 --等功能不是框架的一部分,它位于基本的窗口管理器的左侧。因此,您可以使用主题引擎(Theme engine)来定制桌面。使用Swing UI for GTK+,主题由称为 Metacity的项目来支持(见 参考资料)。通过设置系统属性 swing.metacitythemename ,您可以控制使用那个GTK+主题。除了缺省主题之外,还支持Crux和Bluecurve主题。您可以将其它主题保存在 swing.gtkthemedir 系统属性规定的目录中。GTK+资源文件还提供定制外观的方法。目前不支持创建额外的GTK引擎,但是您可以访问Themes.org以了解未来发展计划。





回页首


SwingSet2和新UI

展示新外观设计最简单的方式是使用J2SE提供的SwingSet2演示程序来阐述,您可以在安装J2SE 1.4的 demo\jfc\SwingSet2 目录中找到它们。您可以使用 java -jar SwingSet2.jar 命令来启动 SwingSet2程序,它使用 -jar 选项来运行JAR清单文件(Manifest file)中规定的主类。

初始界面显示一些JInternalFrame组件和多个按钮 --您经常在桌面应用程序上看到的项目。图3显示Windows XP机器上的SwingSet应用程序的外观:


图3: Windows XP上的SwingSet的外观
SwingSet with Windows XP look and feel

图4显示GTK+的外观:


图4:使用GTK+的SwingSet的外观
SwingSet with GTK+ look and feel

一种比较显而易见的Windows变化是文件对话框。图5显示了Windows XP的对话框外观:


图5:Windows XP文件对话框
Windows XP File Dialog

在GTK+端,图6显示了其弹出窗口(Popup)更用户友好的外观:


图6:GTK+警告对话框
GTK+ Warning Dialog




回页首


结束语

J2SE 1.4.2显著体现了Sun保持Java桌面最新标准与时俱进的承诺。通过Windows XP和GTK+外观设计,用户将发现Java应用程序看起来更像本机的应用程序。除了新型外观设计之外,J2SE 1.4.2还包括大量的Bug fixes和一个JFileChooser,在某些环境中,它的速度要快3倍。(您可能奇怪如果它这么慢的话,我们为什么还一直在使用它呢,但它至少目前是快速的。)



参考资料



关于作者

John Zukowski 为 JZ Ventures, Inc.做战略性 Java 咨询,同时还担任许多 jGuru由社区驱动的 Java FAQ的常驻指导。他最近的著作有 Apress 的 Java Collections Definitive Guide to Swing for Java 2 (第 2 版)。可通过 jaz@zukowski.net与 John 联系。




对本文的评价

太差! (1)
需提高 (2)
一般;尚可 (3)
好文章 (4)
真棒!(5)

建议?




回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款