已经大家提到的基本差异是一个是 heavy weight 而另一个是 light weight . 让我解释一下,基本上重量级意味着什么,当你使用awt组件时,用于获取视图组件的本机代码 is generated by the Operating System ,这就是为什么它的外观和感觉发生了变化 from OS to OS. 在swing组件中它的责任是 JVM to generate the view for the components. 我看到的另一个陈述是 swing is MVC based and awt is not.
14
Swing vs AWT . 基本上AWT是第一个,它是一组重量级UI组件(意味着它们是操作系统对象的包装器),而Swing构建在AWT之上,具有更丰富的轻量级组件 .
有些人更喜欢AWT的原生外观而不是Swing 's '并不完全有' platform skins. (There are better 3rd party native looking skins than Swing'的实现BTW)很多人更喜欢使用AWT 's FileDialog over Swing'的FileChooser,因为它给了大多数人习惯的平台文件对话框而不是'weird'自定义Swing .
8 回答
AWT是操作系统中存在的本机系统GUI代码的Java接口 . 虽然它尝试,但它在每个系统上都不会起作用 .
Swing是一个或多或少的纯Java GUI . 它使用AWT创建一个操作系统窗口,然后将按钮,标签,文本,复选框等图片绘制到该窗口中,并响应所有鼠标点击,关键条目等,自行决定做什么而不是让操作系统处理它 . 因此,Swing是100%可移植的并且在不同平台上是相同的(尽管它是可换肤的并且具有“可插拔的外观和感觉”,可以使它看起来或多或少看起来像本机窗口和小部件看起来如何) .
这些是非常不同的GUI工具包方法,并且会产生很多后果 . 对您的问题的完整答案将尝试探索所有这些 . :)这是一对夫妇:
AWT是一个跨平台的接口,因此即使它使用底层操作系统或本机GUI工具包来实现其功能,它也无法访问这些工具包可以执行的所有操作 . 可能不存在另一个平台上可能存在的高级或更新的AWT小部件 . 可能不支持在每个平台上不相同的小部件的功能,或者更糟糕的是,它们可能在每个平台上以不同方式工作 . 人们过去投入了大量精力来使他们的AWT应用程序在不同平台上一致地工作 - 例如,他们可能会尝试从Java调用本机代码 .
因为AWT使用本机GUI小部件,所以操作系统知道它们并处理它们彼此前面等等,而Swing小部件是从操作系统的角度来看窗口内无意义的像素 . Swing本身可以处理小部件的布局和堆叠 . 混合AWT和Swing是非常不受支持的,并且可能导致荒谬的结果,例如本机按钮会遮挡它们所在的对话框中的所有其他内容,因为其他所有内容都是使用Swing创建的 .
因为除了原生GUI窗口提供的原始图形例程之外,Swing尝试用Java完成所有可能的事情,因此与AWT相比,它曾经导致相当大的性能损失 . 不幸的是,这让Swing很慢 . 然而,由于更优化的JVM,更快的机器和(我假设)Swing内部的优化,这在过去几年中急剧缩小 . 今天,Swing应用程序可以足够快地运行,以便可维护甚至是zippy,并且几乎与使用本机小部件的应用程序无法区分 . 有些人会说到达这一点花了太长时间,但大多数人会说这是值得的 .
最后,您可能还想查看SWT(用于Eclipse的GUI工具包,以及AWT和Swing的替代方法),这有点回归到AWT通过Java访问本机Widgets的想法 .
已经大家提到的基本差异是一个是 heavy weight 而另一个是 light weight . 让我解释一下,基本上重量级意味着什么,当你使用awt组件时,用于获取视图组件的本机代码 is generated by the Operating System ,这就是为什么它的外观和感觉发生了变化 from OS to OS. 在swing组件中它的责任是 JVM to generate the view for the components. 我看到的另一个陈述是 swing is MVC based and awt is not.
Swing vs AWT . 基本上AWT是第一个,它是一组重量级UI组件(意味着它们是操作系统对象的包装器),而Swing构建在AWT之上,具有更丰富的轻量级组件 .
任何严肃的Java UI工作都是在Swing而不是AWT中完成的,它主要用于applet .
至于AWT可能比Swing更有用 -
您可能针对的是较旧的JVM或平台,它不需要安装较新的Java插件 . 我不确定当前最广泛安装的Java插件版本是什么 - 今天可能会有所不同 .
有些人更喜欢AWT的原生外观而不是Swing 's '并不完全有' platform skins. (There are better 3rd party native looking skins than Swing'的实现BTW)很多人更喜欢使用AWT 's FileDialog over Swing'的FileChooser,因为它给了大多数人习惯的平台文件对话框而不是'weird'自定义Swing .
AWT和Swing之间的这种差异导致了一些后果 .
AWT是操作系统之上的薄层代码,而Swing则要大得多 . Swing还具有非常丰富的功能 . 使用AWT,你必须自己实现很多东西,而Swing内置了它们 . 对于GUI密集型工作,与Swing相比,AWT感觉非常原始 . 由于Swing本身实现GUI功能而不是依赖主机操作系统,因此它可以在Java运行的所有平台上提供更丰富的环境 . AWT在所有平台上提供相同的功能更受限制,因为并非所有平台都是如此以相同的方式实现相同的控件 .
Swing组件称为"lightweight",因为它们不需要本机OS对象来实现其功能 .
JDialog
和JFrame
是重量级的,因为他们确实有同伴 . 因此,像JButton
,JTextArea
等组件是轻量级的,因为它们没有OS对等体 .Swing:
Swing是java基础类的一部分 .
Swing组件与平台无关 .
Swing组件是轻量级组件,因为swing位于awt的顶部 .
AWT:
AWT被称为抽象窗口工具 .
AWT组件与平台有关 .
AWT组件是重量级组件 .
swing组件提供了非常灵活的用户界面,因为它遵循模型视图控制器(mvc) .
awt不是基于mvc的 .
swing工作得更快 .
awt无法更快地运行 .
摆动部件重量轻 .
awt组件重量很重 .
swing占用的内存空间更少 .
awt占用更多内存空间 .
swing组件与平台无关 .
awt取决于平台 .
swing需要javax.swing包 .
awt需要javax.awt包 .
AWT 1 . AWT占用更多的内存空间2 . AWT取决于平台3 . AWT需要javax.awt包
swings 1 . Swing占用的内存空间更少2 . Swing组件与平台无关3 . Swing需要javax.swing包