简析组件AWT和Swing各有的优缺点及区别

AWT
AWT是Abstract Window Toolkit(抽象窗口工具包)的缩写,是SUN专门针对Java GUI编程提供的最先的也是最初的开发工具包,用来创建和设置Java图形用户界面,这个工具包提供了一套与本地图形界面交互的接口。AWT 中的图形函数与操做系统所提供的图形函数之间有着一一对应的关系(peers)。也就是说,当咱们利用 AWT 来构件图形用户界面的时候,其实是在利用操做系统所提供的图形库。不过因为不一样操做系统的图形库所提供的功能是不彻底同样,因此在一个平台上存在的功能在另一个平台上则可能不存在。这就致使一些应用程序在测试时界面很是美观,而一旦移植到其余的操做系统平台上后就可能变得“惨不忍睹”。为了实现Java语言"一次编译,处处运行",AWT 不得不经过牺牲功能来实现其平台无关性,其所提供的图形功能被定格为各类通用型操做系统所提供的图形功能的交集。因为AWT 是依靠本地方法来实现其功能的,因此一般把AWT组件称为重量级组件。
AWT是Sun不推荐使用的工具集。然而它在许多非桌面环境如移动或嵌入式设备中有着本身的优点:
1.更少的内存:对运行在有限环境中的GUI程序的开发,是合适的。
2.更少的启动事件:因为AWT组件是本地由操做系统实现的。绝大多数的二进制代码已经在如系统启动的时候被预装载了,这下降了它的启动事件。
3.更好的响应:因为本地组件由操做系统渲染。
4.成熟稳定的:可以正常工做并不多使你的程序崩溃。
然而事物具备两面性,AWT也有着许多缺点:
1.更少组件类型:表和树这些重要的组件缺失了。它们是桌面应用程序中广泛使用的。
2.缺少丰富的组件特征:按钮不支持图片。
3.无扩展性:AWT的组件是本地组件。JVM中的AWT类实例实际只是包含本地组件的引用。惟一的扩展点是AWT的Canvas组件,能够从零开始建立自定义组件。然而没法继承和重用一个已有的AWT组件java

Swing
Swing 是在AWT的基础上构建的一套新的图形界面系统,是JFC(Java Foundation Class)的一部分,是试图解决AWT缺点的一个尝试。它提供了AWT 所可以提供的全部功能,而且用纯粹的Java代码对AWT 的功能进行了大幅度的扩充。全部的swing组件实际上也是AWT的一部分。Swing 对基于对等体的组件使用的术语是重量级,对于模拟的组件使用的术语是轻量级。实际上,Swing 能够支持在一个 GUI 中混合使用重量级组件和轻量级组件,不过通常将其称之为轻量级组件。
Swing是三者中最强大的GUI工具集,同时它也是SUN推荐使用的GUI工具集,经过几个本版的修改和扩展后,如今的swing在某些领域有着明显优点:
1.丰富的组件类型:Swing提供了很是普遍的标准组件。这些组件和SWT同样丰富。基于它良好的可扩展性,除了标准组件,Swing还提供了大量的第三方组件。许多商业或开源的Swing组件库在开发多年后都已经能够方便地获取了。
2.丰富的组件特性:Swing不只包含了全部平台上的特性,它还支持根据程序所运行的平台来添加额外特性。Swing组件特性遵循特定原则,易于扩展,所以可以提供较SWT和AWT更多的功能。
3.好的组件API模型支持:Swing遵循MVC模式,这是一种很是成功的设计模式。它的API成熟并设计良好。通过多年的演化,Swing组件APIs变得愈来愈强大,灵活和可扩展。它的API设计被认为是最成功的GUI API之一。较之SWT和AWT更面向对象,也更灵活而可扩展。
4.标准的GUI库:Swing和AWT同样是JRE中的标准库。所以,你不用单独地将它们随你的应用程序一块儿分发。它们是平台无关的,不用担忧平台兼容性。
5.成熟稳定:因为它是纯Java实现的,不会有SWT的兼容性问题。Swing在每一个平台上都有相同的性能,不会有明显的性能差别。
6.可扩展和灵活性。Swing彻底由Java代码实现。Swing基于MVC的结构使得它能够发挥Java做为一门面向对象语言的优点。它提供了许整体上良好的性能。
固然,swing也有着许多不足之处:好比swing比AWT和SWT更多的内存消耗。Swing本身实现了全部组件。所以,它在运行时装载了大量的类。而在运行时Java在堆上建立小的对象致使了额外的堆空间消耗。而许多小的对象难以有效地被垃圾回收机制回收。所以,Swing应用程序一般会因没法及时回收冗余的对象而致使性能降低。编程

AWT组件与Swing组件有什么区别?
Swing是AWT的扩展,它提供了许多新的图形界面组件。Swing组件以“J”开头,除了拥有与AWT相似的按钮(JButton)、标签(JLabel)、复选框(JCheckBox)、菜单(JMenu)等基本组件外,还增长了一个丰富的高层组件集合,如表格(JTable)、树(JTree)。在javax.swing包中,定义了两种类型的组件:顶层容器(Jframe、Japplet、JDialog和JWindow)和轻量级组件。
 设计模式

相关文章
相关标签/搜索