一、Java界面设计的用途:

    JavaSE(Java Standard Edition)即Java标准版,一般也可以理解作Java桌面版。开发者可以通过JavaSE开发丰富并且强大的具有图形界面的桌面应用程序。

    Java的图形化界面工具包,可以用于工具类软件开发、管理类软件开发、通用客户端开发、银行客户端软件开发、Eclipse插件开发等方向。在许多知名的大型软件中,都能见到Java的身影,如某些版本的Photoshop、思维导图软件、Eclipse、IDEA开发环境等。

    开发者也可以使用Java为自己设计一些提高效率的工具软件,帮助自己处理机械性的工作。

    为何Java有多套GUI工具包?最好的答案是,没有一个可以满足所有要求的GUI工具包。

    Java的GUI工具包包含AWT、Swing和SWT,每个工具包都有各自的优缺点,开发者可以根据自己的需求和目标用户来选择适当的工具包。

二、Java GUI设计的三个工具包:AWT Swing SWT

    AWT(Abstract Windows Toolkit)是最原始的Java GUI工具包。AWT的主要优点是,它在Java技术的每个版本上都成为了一种标准配置,包括早期的Web浏览器中的Java实现;另外它也非常稳定。这意味着我们不需要单独安装这个工具包,在任何一个Java运行环境中都可以使用它。

    AWT是一个非常简单的具有有限GUI组件、布局管理器和事件的工具包(如窗体、文本标签、按钮、菜单等)。这是因为Sun公司决定为AWT使用一种最小公分母(LCD)的方法。因此它只会使用为所有Java主机环境定义的GUI组件。

    由于AWT要依赖主机GUI的对等体(peer)控件(其中每个AWT组件都有一个并行的主机控件或者对等体)来实现这个GUI,这个GUI的外观和行为在不同的主机上会有所不同。这和Java的“一次编写,处处运行”理念冲突,所以构成了AWT的局限性。


    Java Swing是Java Foundation Classes(JFC)的一部分,它是试图解决AWT缺点的一个尝试。在Swing中,Sun开发了一个经过仔细设计的、灵活而强大的GUI工具包。Swing是在AWT组件基础上构建的。Swing使用了AWT的事件模型和支持类,例如Colors、Images和Graphics。Swing组件、布局管理器以及事件比AWT提供的组件集更为广泛,完全满足各种开发需求。

    为了克服在不同主机上行为也会不同的缺点,Swing将主机控件的依赖性降至了最低。实际上,Swing只为诸如窗口和框架之类的顶层组件使用对等体。大部分组件(JComponent及其子类)都是使用纯Java代码来模拟的。这意味着Swing天生就可以在所有主机之间很好地进行移植。因此,Swing通常看起来并不像本地程序。实际上,它有很多外观,有些模拟不同主机的外观,有些则提供了独特的外观。

    Swing对基于对等体的组件使用的术语是重量级(heavyweight),对于模拟的组件使用的术语是轻量级(lightweight)。事实上,Swing可以支持在一个GUI中混合使用重量级组件和轻量级组件,例如在一个JContainer中混合使用AWT和Swing控件。除此之外,它还有以下优势:1.基于MVC结构 2.可编程外观 3.呈现器与编辑器 4.支持以任意顺序构建GUI 5.可访问性 6.支持自动销毁 7.是标准Java的一部分


    SWT也是基于一个对等体实现的,在这一点上它与AWT非常类似。它克服了AWT所面临的LCD问题,方法如下:定义了一组控件,它们可以用来构建大部分办公应用程序或开发者工具,然后可以按照逐个主机的原则,为特定主机所没有提供的组件创建模拟控件(这与Swing类似)。对于大部分现代主机来说,几乎所有的控件都是基于对等体的。这意味着基于SWT的GUI既具有主机外观,又具有主机的性能。这样就避免了使用AWT和Swing而引起的大部分问题。特定的主机具有一些低级功能控件,因此SWT提供了扩充(通常是模拟的)版本(通常使用“C”作为名字中的第一个字母),从而可以产生更一致的行为。

    在SWT中,对等体只是主机控件上的一些特殊封装程序而已。这意味着SWT应用程序实际上就是一个主机应用程序,它必然会全部继承主机的优点和缺点。这还意味着SWT不能完全实现“一次编写,处处测试”解决方案。这就是说,SWT尽管不如Swing那么优秀,但是它在创建可移植解决方案方面是很杰出的。此外,SWT还具有以下特点:1.不支持GUI自动销毁 2.仅支持自顶向下构建GUI 3.对Java2D的支持不够完善 4.不属于标准Java的一部分

三、如何选择GUI工具包的使用

    Swing是最灵活、强大的GUI工具包,所以在界面开发中,首选Swing,它可以胜任绝大多数开发工作。

    只有一种场合不适合用Swing:在使用SWT开发的程序上继续编写界面,比如为Eclipse开发插件(因为Eclipse是基于SWT构建的)。SWT与Swing不兼容,他们不能混合使用。