开发者能够经过Java SE开发丰富而且强大的具备图形界面的桌面应用程序。也能够设计一些提升效率的工具软件,帮助本身处理机械性工做。编程
Java 的图形界面工具包,能够用于工具类软件开发、管理类软件开发、通用客户端开发、银行客户端软件开发、Eclipse 插件开发等方向。在许多知名的大型软件中,都可以见到 Java 的身影,如某些版本的 Photoshop、思惟导图软件、Eclipse、IDEA 开发环境等。浏览器
Java有多套GUI工具包,由于没有一个能够知足全部的要求。 Java的GUI工具包包含AWT, Swing和SWT,每一个工具包都有各自的优缺点,开发者能够根据本身的需求和目标来选择适当的工具包。app
Abstract Windows Toolkit(AWT)是最原始的 Java GUI 工具包。AWT的主要优势是,它是每一个Java版本的标准配置,包括早期的Web浏览器中的Java实现;而且很是稳定。这意味着咱们不须要单独安装这个工具包、在任何一个Java运行环境中均可以使用它。框架
它是一个很是简单的具备有限 GUI 组件、布局管理器和事件的工具包(如窗体、文本标签、按钮、菜单等)。这是由于Sun公司决定为AWT使用一种最小公分母的方法,只提供全部操做系统都有的控件。所以它只会使用为全部Java主机环境定义的GUI组件。编辑器
因为AWT要依赖于主机GUI的对等体(peer)控件(其中每一个AWT组件都有一个并行的主机控件或者对等体)来实现这个GUI,这个GUI的外观和行为在不一样的主机上会有所不一样。这与Java的“一次编写,到处运行”理念冲突,因此AWT有局限性。工具
Java Swing 是 Java Fundation Classes ( JFC ) 的一部分,它试图解决AWT的缺点。在 Swing 中,Sun 开发了一个通过仔细设计的,灵活而强大的GUI工具包。Swing 是在 AWT 组件基础上构建的。Swing 使用了 AWT 的事件模型和支持类,例如 Colors、Images 和 Graphics。Swing 组件、布局管理器以及事件比 AWT 提供的组件集更为普遍,彻底知足各类开发需求。布局
为了克服在不一样主机上行为也会不一样的缺点,Swing 对主机控件的依赖性降至了最低。实际上,Swing只为诸如窗口和框架之类的顶层组件使用对等体, 好像是JFrame,JWinodows,JDialog(记不太清了,好像是这几个)是调用本地操做系统的控件。大部分组件( JComponent 及其子类)都是使用纯Java代码来模拟的。这意味着Swing天生就能够在全部主机之间很好地进行移植。所以,Swing一般看起来并非本地程序。实际上,它有不少外观,有些模拟不一样的主机外观,有些则提供了独特的外观。性能
Swing 对基于对等体的组件使用的术语是重量级(Heavyweight),对于模拟的组件使用的术语是轻量级(llightweight)。实际上,Swing 能够支持在一个GUI中混合使用重量级组件和轻量级组件,例如在一个 JContainer 中混合使用AWT和Swing控件。 Swing 具备如下优点:测试
基于 MVC 结构ui
可编程外观
呈现器与编辑器
支持以任意顺序构建 GUI
可访问性
支持自动销毁
是标准 Java 的一部分
IBM更喜欢AWT的实现机制,作出了SWT,SWT采用的是最大公倍数的作法。SWT大部分都是用的本地操做系统的控件,一些在windows里有的控件可能在linux下没有,对这种控件才采用本身绘制的方式。SWT采用相似JAVA虚拟机的方式,在不一样的平台,有不一样的开发包,咱们写的java代码是同样的,但不一样平台下看起来外观是不同的,但性能提高很高,听说和C++作的界面速度差很少:)
SWT 也是基于对等体实现的,在这点上与 AWT 类似。它克服了 AWT 所面临的 LCD 的问题,方法以下:它定义一组控件,它们能够用来构建大部分办公应用程序或者开发者工具,而后能够按照逐个主机的原则,为特定主机所没有提供的空间建立模拟控件(这与 Swing 相似)。对大部分现代主机来讲,几乎全部的控件都是基于本地对等体的。这意味着基于 SWT 的 GU I既具备主机的外观,又具备主机的性能。这样就避免了使用 AWT 和 Swing 而引发的大部分问题。特定的主机具备一些低级功能控件,所以 SWT 提供了扩充(一般是模拟的)版本(一般使用 “C” 做为名字中的第一个字母),从而能够产生更一致的行为。
在SWT中,对等体只是主机空间上的一些封装程序而已。这意味这SWT应用程序其实是一个主机应用程序,它必然会所有继承主机的优缺点。这还意味着SWT不能彻底实现 “一次编写,到处运行” 的目标;它更像是一种 “一次编写,到处测试” 的解决方案。这就是说,SWT景观不如Swing那么优秀,可是它在建立可移植解决方案方面是杰出的。SWT具备如下特色:
不支持GUI自动销毁
仅支持自顶向下构建GUI
对Java2D的支持不够完善
不属于标准Java的一部分
Swing是最灵活,强大的GUI工具包,因此在界面开发中,首选Swing, 他能够胜任绝大多数开发工做。
只有一种场合不适用于Swing: 在使用SWT开发的程序上继续编写界面,好比为Eclipse开发插件(由于Eclipse是基于SWT构建的)。SWT与Swing不兼容,它们不能混合使用。
引一名话:this is equivalent to asking whether a harmmer is better than a screw driver,of course ,a hammer wieldded with sufficient force can probably drive a screw into a wall ,and the butt of a screw can be used in a pinch to knock in a nail. However, a good carpenter keeps both harmer and screw drivers in her tool box and will use the tool that is appropriate for the job at hand.
我的感受之前 Java 作界面彻底没有优点,从外观到性能(我很喜欢Swing的look and feel,能够改变风格),SWT的出现改变了性能上的缺点,再加上JFace,及Eclipse的RCP,我仍是倾向于用SWT。