一、Swing与AWT
对象窗口工具箱(Abstact Window Toolkit,AWT),是JAVA1.0刚出现的时候,包含的一个GUI设计类库。它将处理用户界面元素的任务委派给每个目标平台(Windows,Macintosh等)的本地GUI工具箱。本地GUI工具箱负责用户界面元素的创建和动作。比方说,如果你在JAVA窗体中放一个文本框,就会有一个低层的“对等体”文本框(应该可以理解为本地图形元素吧)用来真正处理文本输入。理论上讲程序可以运行在任何平台。 SUN公司对AWTi的口号是:一次编写,随处使用。
对于简单的应用程序来说,这种方法还是不错的。但是想要编写依赖本地一些高质量、可移植的图形库的程序就会暴露出一些缺陷。首先用户界面元素在不同的平台上,在观感上和操作行为上存在一些差别。其次由于同平台上的用户界面元素的丰富程度不同,可移植库的规模很受限制。最糟糕的是在不同平台上AWT用户界面库存在着不同的bug.研发人员需要在每个平台上测试应用程序,人们戏称AWT为:一次编写,随处调试。
后来SUN公司和Netscape创建了Swing用户界面库,它的模式是用户把用户界面元素绘制在空白窗口上,而对等体只需要完成对窗口的创建和绘制。Swing是Java基础类库(Java Foundation Class,JFC)的一部分,而这个类库除了Swing组件,还包括一个可访问性API,一个2DAPI和一个可拖放API。
Swing显示元素要比显示AWT基于对等体组件的速度慢一些。但是这不是啥大问题,Swing有无可抗拒的优势使得人们选择Swing:
1、Swing有一个丰富、便捷的用户界面元素集合
2、Swing对底层平台依赖很少,因此与平台相关的bug少。
3、Swing给予不同平台的用户一致的感觉
即使这样,Swing并不能够完全取代AWT,它是基于AWT之上,Swing仅仅提供了强大的用户界面组件,还是要使用基本的AWT处理事件的。
other tips:
1、绝大多是Swing组件都是以"J"开头,eg:JButton,JFrame等。而AWT组件类不带“J”,eg:Button,JFrame等。二者若混合使用会导致组件视觉和行为的不一致。
2、Swing类位于javav.swing包中,包名javax表示这是一个Java扩展包,而不是核心包。