Swing和AWT有什么区别?

2022-08-31 05:41:24

有人可以解释一下Swing和AWT有什么区别吗?

是否有任何情况下AWT比摆动更有用/更建议使用,反之亦然?


答案 1

AWT 是操作系统中存在的本机系统 GUI 代码的 Java 接口。它不会在每个系统上都以相同的方式工作,尽管它尝试了。

Swing或多或少是一个纯Java GUI。它使用AWT创建操作系统窗口,然后将按钮,标签,文本,复选框等的图片绘制到该窗口中,并响应所有鼠标单击,键条目等,自行决定要做什么,而不是让操作系统处理它。因此,Swing是100%可移植的,并且在各个平台上都是相同的(尽管它是可换肤的,并且具有“可插入的外观和感觉”,可以使其看起来或多或少与本机窗口和小部件的外观相似)。

这些是截然不同的GUI工具包方法,并且会产生很多后果。对您的问题的完整回答将尝试探索所有这些。:)以下是一对夫妇:

AWT是一个跨平台的界面,因此即使它使用底层操作系统或本机GUI工具包来实现其功能,它也不能提供对这些工具包可以执行的所有操作的访问。一个平台上可能存在的高级或较新的 AWT 小部件在另一个平台上可能不受支持。在每个平台上都不相同的小部件的功能可能不受支持,或者更糟糕的是,它们在每个平台上的工作方式可能不同。人们过去常常投入大量精力来让他们的AWT应用程序跨平台一致地工作 - 例如,他们可能会尝试从Java调用本机代码。

由于AWT使用本机GUI小部件,因此您的操作系统知道它们并处理将它们放在彼此面前等,而从操作系统的角度来看,Swing小部件是窗口中无意义的像素。Swing 本身会处理小部件的布局和堆叠。混合 AWT 和 Swing 是非常不受支持的,并且可能导致荒谬的结果,例如本机按钮会遮盖它们所在的对话框中的其他所有内容,因为其他所有内容都是使用 Swing 创建的。

因为 Swing 试图在 Java 中做所有可能的事情,而不是原生 GUI 窗口提供的非常原始的图形例程,所以与 AWT 相比,它曾经遭受了相当大的性能损失。不幸的是,这使得Swing的速度很慢。然而,在过去几年中,由于更优化的JVM,更快的机器以及(我推测)Swing内部的优化,这种情况已经急剧缩小。如今,Swing 应用程序可以运行得足够快,可以正常使用,甚至非常灵敏,并且几乎无法与使用本机小部件的应用程序区分开来。有些人会说花了太长时间才达到这一点,但大多数人会说这是非常值得的。

最后,您可能还想看看SWT(用于Eclipse的GUI工具包,以及AWT和Swing的替代方案),这在某种程度上回到了AWT通过Java访问本机Widgets的想法。


答案 2

每个人都已经提到的基本区别是,一个是重量重,另一个是重量轻。让我解释一下,基本上术语“重量”的意思是,当你使用awt组件时,用于获取视图组件的本机代码是由操作系统生成的,这就是为什么它的外观和感觉从操作系统到操作系统的变化。与在 Swing 组件中一样,JVM 负责为组件生成视图。我看到的另一种说法是,swing是基于MVC的,而awt不是。


推荐