【发布时间】:2010-09-29 08:36:30
【问题描述】:
谁能解释一下 Swing 和 AWT 的区别是什么?
在任何情况下,AWT 比 swing 更有用/更建议使用,反之亦然?
【问题讨论】:
谁能解释一下 Swing 和 AWT 的区别是什么?
在任何情况下,AWT 比 swing 更有用/更建议使用,反之亦然?
【问题讨论】:
Java 8
【讨论】:
【讨论】:
大家已经提到的基本区别是,一个是重,另一个是轻。让我解释一下,重量级这个词的基本含义是,当您使用 awt 组件时,用于获取视图组件的本机代码由操作系统生成,这就是为什么它看起来和感觉会发生变化从 OS 到 OS。 在 swing 组件中,JVM 有责任为组件生成视图。 我看到的另一个声明是 swing是基于 MVC 而 awt 不是。
【讨论】:
AWT 和 Swing 之间的这种差异会导致一些后果。
AWT 是操作系统之上的一层薄薄的代码,而 Swing 则要大得多。 Swing 还具有非常丰富的功能。使用 AWT,您必须 自己实现很多东西,而 Swing 内置了它们。对于 GUI 密集型工作,与 Swing 相比,AWT 感觉非常原始。 因为 Swing 自己实现了 GUI 功能,而不是依赖于 主机操作系统,它可以在 Java 运行的所有平台上提供更丰富的环境。 AWT 在所有平台上提供相同功能方面受到更多限制 因为并非所有平台都以相同的方式实现外观相同的控件 方式。
Swing 组件被称为“轻量级”,因为它们不需要
本机 OS 对象来实现其功能。 JDialog 和 JFrame 是
重量级,因为他们确实有同行。所以像JButton这样的组件,
JTextArea 等是轻量级的,因为它们没有 OS 对等体。
peer 是操作系统提供的小部件,例如 按钮对象或输入字段对象。
【讨论】:
摇摆:
AWT:
【讨论】:
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 访问本机小部件的想法。
【讨论】:
AWT 1. AWT占用更多内存空间 2. AWT 依赖于平台 3. AWT 需要 javax.awt 包
波动 1. Swing占用更少的内存空间 2. Swing 组件独立于平台 3. Swing 需要 javax.swing 包
【讨论】:
至于 AWT 何时可能比 Swing 更有用 -
【讨论】:
Swing vs AWT。基本上,AWT 最先出现,是一组重量级的 UI 组件(意味着它们是操作系统对象的包装器),而 Swing 则建立在 AWT 之上,并带有一组更丰富的轻量级组件。
任何重要的 Java UI 工作都是在 Swing 而不是 AWT 中完成的,AWT 主要用于小程序。
【讨论】: