当Java在1995年的春天第一次发布的时候,它包含了一个叫AWT(AbstractWindowing Toolkit)的库,用来构建图形用户界面应用程序。
AWT的缺省实现使用了"对等"机制,即每一个JavaGUI窗口部件都在底层的窗口系统中有一个对应的组件。
什么是对等机制呢?
例如,每一个java.awt.Button对象将在底层窗口系统中创建一个唯一对应的button。当用户点击那个按钮的时候,事件将从本地实现库传送到Java虚拟机里,并且最终传送到与java.awt.Button对象相关联的逻辑。对等系统的实现以及Java组件与对等组件之间的交流的实现都隐藏在底层JVM实现中,Java语言级的代码仍然跨平台。
AWT只提供基本的组件,使很多设计变得复杂,且无法在不同的平台下保持显示风格的一致性.
于1997年JavaOne大会上提出并在1998年5月发布的JFC(JavaFoundation Classes)包含了一个新的使用Java窗口开发包。这个新的GUI组件叫做Swing。
AWT依赖对等架构,用Java代码包装本地窗口部件,Swing却根本不使用本地代码和本地窗口部件
AWT把绘制屏幕交给本地窗口部件,Swing自己的组件绘制自己
因为Swing不依赖本地窗口部件,它可以抛弃AWT的最小公分母的方法并在每个平台下实现每个窗口部件,从而创建一个比AWT更强大的开发工具包。
SWT(StandardWidgetToolkit)是Eclipse.org社区人员开始构建Eclipse时,创建的一套GUI开发工具。该工具最初用来显式Eclipse界面。
SWT的设计者们采用了AWT的对等架构,而仅仅当本地组件不存在时(例如Motif下的树形组件)才求助于Java实现。这样,SWT吸收了AWT和Swing实现的最好的部分:当可以得到本地组件时使用本地实现,当不能得到本地组件时使用Java实现。这就同时保证了与本地窗口部件相当的外观和响应度。
SWT于2001年与EclipseIDE(Integrated Development Environment)一起集成发布。
Jface的构建基于SWT,它提供了SWT的功能和更简易的MVC模式。
JFace则提供了在SWT基础之上的抽象层,所以你可以对抽象层编程然后抽象层与SWTAPI交互来替代直接对SWTAPI编程。
JFace没有彻底地抽象SWT。即使在用JFace写的程序中也会常常出现SWT及它的低级API。
通过几个方面的比较,如下表1所示:
特性 |
AWT |
Swing |
SWT |
实现机制 |
awt采用最小公约数的办法,只提供所有操作系统都有的控件 全部调用本地操作系统的控件(对等机制) |
Swing只为诸如窗口和框架之类的顶层组件调用操作系统控件。 大部分组件都是使用纯Java代码来模拟的(非对等机制) |
大部分都是用的本地操作系统的控件 一些在windows里有的控件可能在linux等其它系统下没有,对这种控件才采用自己绘制的方式(AWT与Swing折中方案) |
开发者 |
Sun JDK |
SunJDK |
IBM Eclipse项目 |
可移植性 |
在Java技术的每个版本都成为标准配置 |
是Java技术的一种标准配置 它很容易依赖于最新版本的 Java语言所提供的特性,这可能会强制用户更新自己的Java运行时环境 |
不是Java技术的标准配置,必须单独进行安装 在不同操作系统下需要不同的运行库 由于不同系统GUI元素行为可能不同,需要在部署前测试 |
外观 |
GUI的外观和行为在不同的主机上会有所不同 |
Swing通常看起来并不像是本地程序,有些模拟不同主机的外观,有些则提供了独特的外观可以定制皮肤 |
SWT应用程序实际上就是一个主机应用程序与其他主机程序有类似的界面 |
速度 |
|
之前很慢,Jdk1.5后swing运行速度有了很大提高 |
调用本地控件绘制,速度快 |
组件 |
|
丰富,包含所有常用界面控件 JGraph支持图形编辑器开发 |
丰富,包含所有常用界面控件 丰富的插件支持,GMF支持图形编辑器开发,RCP支持类EClipse界面应用界面开发 |
IDE |
|
支持Java的IDE均支持 Jbuilder,Netbean,EclipseVE,都支持可视化控件编辑 |
只有Eclipse支持 EclipseVE, swt-designer,jigloo支持可视化SWT编辑 |
表1 AWT、SWing、SWT的比较
如果觉得以上还不够的话,可以参考《细说:AWT,SWT,Swing》一文,网址:
http://dolive.iteye.com/blog/202758。但是作为一般开发来讲,了解以下GUI发展历史即可。
参考资料:
1)跟我学Java之JavaGUI的发展和演化 http://dev.yesky.com/36/2156536_2.shtml
2)awt,swing,swt比较 http://xuming9.blog.163.com/blog/static/9221440320081089593830/