一般的swing组件都是从awt组件继承的,swing是轻量组件没有本地peer跟他对应
而awt是重量组件,每个组件都有一个本地peer.这就是为什么swing组件在大多数系统上显示都差不多而awt就反之了。
AWT是通过调用操作系统的native方法实现的,所以在Windows系统上的AWT窗口就是Windows的风格,而在Unix系统上的则是XWindow风格。
Swing是所谓的Lightweight组件,不是通过native方法来实现的,所以Swing的窗口风格更多样化。但是,Swing里面也有heaveyweight组件。比如JWindow,Dialog,JFrame
同时,由于AWT是通过操作系统实现的,所以AWT的组件只能采取各个操作系统的交集,组建数量少,功能少。而Swing则不依赖于操作系统,所以组件多,功能强。
Swing由纯Java写成,可移植性好,外观在不同平台上相同。所以Swing部件称为轻量级组件(轻量级组件就是指:LIGHTWEIGHT COMPONENT,是指,Swing是由纯JAVA CODE所写的,因此SWING解决了JAVA因窗口类而无法跨平台的问题,使窗口功能也具有跨平台与延展性的特性,而且SWING不需占有太多系统资源,因此称为轻量级组件!!!)
[转载]既生 AWT,何生 Swing?作者:蔡学镛
在 Java 技术刚出现的初期,大家最感兴趣的 Java API 无疑地就是 AWT。一方面因为 JDK 1.0 时只有 AWT 称得上是一组完整的 application framework,其它 Java API 都比较偏向个别的 class,二方面是因为当时大家受尽了 MFC 的苦,希望能有一个比较好的替代品。
MFC 的兴盛期已过,目前余孽尚存,我很乐见这种不良的 API 逐渐雕零。Bruce Eckel 说得好:「MFC 是我经验过最糟糕的东西(MFC is the worst thing that I've experienced)」。少说重话的 Bruce Eckel 批评 MFC 其来有自,因为 Bruce Eckel 是对象导向程序设计的倡导者,而 MFC 正是对象导向设计失败的绝佳范例。相较于 MFC 的不良设计,AWT 在对象导向方面就好很多了,但是因为两者都采用 ripple 形式的 event model,所以两者在这方面很类似。在 JDK 1.1 版以后,整个 Java(包括 AWT)的 event model 改用较好的 delegation event model。
JDK 1.2 之后,Java 有了另一组 GUI 的 API,叫做 Swing。因为 Swing 是 lightweight 的 API,所以无所不能,不但有各式各样先进的组件,而且连组件风格都可抽换。Swing 出现之后,大家很快地就不太使用 AWT 了。我发现 lightweight 组件近年来大行其道,跨 Windows/unix/Linux 平台的 Qt 也是 lightweight 组件的套件。
不要以为 Swing 是用来取代 AWT 的,其实 Swing 是架构在 AWT 之上做出来的(Swing 有四个 heavyweight 组件),没有 AWT,也就不会有 Swing。Swing 的出现只是减少程序员直接使用 AWT 的机会,而不会让 AWT 消失。
不管你选用 AWT 或 Swing 来开发你的 GUI,最好不要同时使用两者,因为:
AWT 或 Swing 的视觉风格差异很大,混用两者感觉不协调。
Swing 的组件大部分都是 lightweight,而 AWT 的组件一律是 heavyweight,两者混在一起可能会造成 Z-Order 的错乱。(请看「探究 Z-Order」一文)
混用 AWT 和 Swing 很可能会造成 Swing 的最佳化无用武之地,结果速度比只用 AWT 或只用 Swing 都来得慢。
虽然 Swing 的组件有诸多优点,但是它有一项致命的缺点 ...「慢」。许多人开发出来的 Swing 程序执行速度很慢,但是问题不见得全都出在 Swing 上面,有可能在于程序员的程序经验不足,思虑欠周所致。遇到像这样的情况,我会建议他们把程序的某些地方改写,通常效能会有明显地改进。如果这样还是不够快,那么最后一招就是把 GUI 由 Swing 改成 AWT。
最近 AWT 又变得稍微重要起来了。IA(信息家电)产品热潮逐渐兴起,许多 IA 产品上会有 JRE,能够执行 Java 程序,例如 WinCE、PalmOS、Symbian EPOC 这三大 PDA 的 OS 都有 JRE。比起桌上型计算机,掌上型的 IA 不但内存有限、CPU 不够快、屏幕小且色彩少。这类 IA 上面的 Java 程序一定要用 AWT 来设计 GUI,因为这类装置的 JRE 根本不支持 Swing 这样耗费资源的庞然大物。
总而言之,如果你:
需要快速的 GUI,或者
需要在 IA 上开发 Java 程序
那么,你应该多花一点时间把 AWT 学好。否则,你应该直接去学 Swing,会比较实际些。
AWT和SWING的类架构 awt和swing的区别
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
python中excel两列连接
一、需求描述及实现思路(一)需求描述 将两个数据表格中有唯一相同的一列值,但该列值内容存有一定差异,有些事全程,有些事简写或者部分名称,现需将两个表格合并在一起。(多表格的模糊匹配)(二)总体思路 首先,代码使用
python中excel两列连接 python pandas 开发语言 github