迄今为止,所有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();
}
}
UIManager 的 setLookAndFeel() 调用允许您进入新外观设计完全标准化的类名中。您再也无须担心哪个类名适用于交叉平台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