简单解释:
awt包中很多组件是组件自身调用本地操作系统代码。
swing包中组件是调用本地虚拟机方法,再由虚拟机方法调用本地操作系统代码。
详细解释:
awt是abstract Windows toolkit(抽象窗口工具包)的简称,这个包提供了与本地图形界面进行交互的接口。awt的图形界面函数与操作系统的图形界面函数是一一对应的。所以来说,awt构建图形用户界面,实际上是awt函数调用本地操作系统提供的图形库来实现的。但是,不同操作系统的图形库是有差别的,这些差别会使java代码不能实现“一次编译,到处运行”的特点。因此,为了不违背java的这个特点,awt不得不抛弃各个操作系统独有的功能,只实现各个操作系统通有的功能。因为awt是靠本地操作系统本地方法实现图形界面的,所有又称awt为重量级组件。
swing是在awt基础上构建的一套新的图形库,他实现了awt所有功能,同时又用纯java代码对这些功能进行了扩充,例如并不是所有操作系统都提供了对树形控件的支持,但是,swing利用了awt基本作图方法对树形控件进行了模拟。因为swing中的功能是利用纯java代码写的,因此一个平台上的树形控件可以在另一个平台上运行。因为swing没有使用本地操作系统方法来实现图形用户界面,因此有称swing为轻量级控件。
AWT和Swing之间的基本区别
: AWT 是基于本地方法的C/C++程序,其运行速度比较快;Swing是基于AWT 的Java程序,其运行速度比较慢。对于一个嵌入式应用来说,目标平台的硬件资源往往非常有限,而应用程序的运行速度又是项目中至关重要的因素。在这种矛盾的情况下,简单而高效的AWT 当然成了嵌入式Java的第一选择。而在普通的基于PC或者是工作站的标准Java应用中,硬件资源对应用程序所造成的限制往往不是项目中的关键因素,所以在标准版的Java中则提倡使用Swing, 也就是通过牺牲速度来实现应用程序的功能。