【问题标题】:What is the difference between Swing and AWT?Swing 和 AWT 有什么区别?
【发布时间】:2010-09-29 08:36:30
【问题描述】:

谁能解释一下 Swing 和 AWT 的区别是什么?

在任何情况下,AWT 比 swing 更有用/更建议使用,反之亦然?

【问题讨论】:

标签: java swing awt


【解决方案1】:

Java 8

摇摆

  • 它是 Java 基础类的一部分
  • Swing 基于 AWT 构建
  • Swing 组件是轻量级的
  • Swing 支持可插拔的外观和感觉
  • 独立于平台
  • 使用 MVC:模型-视图-控制器架构
  • 包:javax.swing
  • 与 Swing 的其他组件不同, 是轻量级的,顶级容器是重量级的。

AWT - 抽象窗口工具包

  • 取决于平台
  • AWT 组件是重量级的
  • 包java.awt

【讨论】:

    【解决方案2】:
    • swing 组件提供了非常灵活的用户界面,因为它 跟随模型视图控制器(mvc)。
    • awt 不是基于 mvc 的。
    • swing 效果更快。
    • awt 不能更快地工作。
    • 摆动组件重量轻。
    • awt 组件很重。
    • swing 占用更少的内存空间。
    • awt 占用更多内存空间。
    • swing 组件独立于平台。
    • awt 取决于平台。
    • swing 需要 javax.swing 包。
    • awt 需要 javax.awt 包。

    【讨论】:

    • 我不认为 swing 比 AWT 运行得更快,因为 AWT 使用操作系统中已经存在的本机代码(gui 代码),但 swing 从头开始​​构建每个组件。所以 AWT 可能会更快。您能说一下您对 swing 工作得更快 的看法吗?谢谢。
    【解决方案3】:

    大家已经提到的基本区别是,一个是,另一个是。让我解释一下,重量级这个词的基本含义是,当您使用 awt 组件时,用于获取视图组件的本机代码由操作系统生成,这就是为什么它看起来和感觉会发生变化从 OS 到 OS。 在 swing 组件中,JVM 有责任为组件生成视图。 我看到的另一个声明是 swing是基于 MVC 而 awt 不是。

    【讨论】:

    • 其实 Swing 使用的是 Model-Delegate 的方式,它是从 MVC 的方式中派生出来的,其中 View 和 Controller 结合起来形成一个 Delegate 结构
    【解决方案4】:

    AWT 和 Swing 之间的这种差异会导致一些后果。

    AWT 是操作系统之上的一层薄薄的代码,而 Swing 则要大得多。 Swing 还具有非常丰富的功能。使用 AWT,您必须 自己实现很多东西,而 Swing 内置了它们。对于 GUI 密集型工作,与 Swing 相比,AWT 感觉非常原始。 因为 Swing 自己实现了 GUI 功能,而不是依赖于 主机操作系统,它可以在 Java 运行的所有平台上提供更丰富的环境。 AWT 在所有平台上提供相同功能方面受到更多限制 因为并非所有平台都以相同的方式实现外观相同的控件 方式。

    Swing 组件被称为“轻量级”,因为它们不需要 本机 OS 对象来实现其功能。 JDialogJFrame 是 重量级,因为他们确实有同行。所以像JButton这样的组件, JTextArea 等是轻量级的,因为它们没有 OS 对等体。

    peer 是操作系统提供的小部件,例如 按钮对象或输入字段对象。

    【讨论】:

      【解决方案5】:

      摇摆:

      1. Swing 是 Java 基础类的一部分。
      2. Swing 组件独立于平台。
      3. Swing 组件是轻量级组件,因为 Swing 位于 awt 的顶部。

      AWT:

      1. AWT 被称为抽象窗口工具。
      2. AWT 组件依赖于平台。
      3. AWT 组件是重量级组件。

      【讨论】:

        【解决方案6】:

        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 访问本机小部件的想法。

        【讨论】:

        • 嗯...已经在多个平台上做了一些相当广泛的 Swing,我可以告诉你,它在不同平台上是不一样的。相似的?当然。相同的?没办法。
        • 重量级/轻量级问题将在 Java 6 更新 12 中消失(参见 java.dzone.com/news/a-farewell-heavyweightlightwei)。
        • 哇。我不敢相信他们可以修复它,我仍然不敢相信混合轻量级和重量级组件会是可取的。但令人难以置信的是,他们能够修复它。
        • 两者都忘了。看看WPF。 :)
        • 这是官方 Java 文章,确认混合已修复:oracle.com/technetwork/articles/java/…
        【解决方案7】:

        AWT 1. AWT占用更多内存空间 2. AWT 依赖于平台 3. AWT 需要 javax.awt 包

        波动 1. Swing占用更少的内存空间 2. Swing 组件独立于平台 3. Swing 需要 javax.swing 包

        【讨论】:

        • 能说说AWT是怎么占用更多内存空间的吗?因为它使用本机代码?
        • awt 需要 java.awt.*
        【解决方案8】:

        至于 AWT 何时可能比 Swing 更有用 -

        • 您的目标可能是不支持 Swing 的旧 JVM 或平台。如果您正在构建 Applets,这曾经真正发挥作用 - 您希望以最低公分母为目标,这样人们就不必安装更新的 Java 插件。我不确定当前安装最广泛的 Java 插件版本是什么 - 今天可能会有所不同。
        • 有些人更喜欢 AWT 的原生外观,而不是 Swing 的“不完全在那里”平台外观。 (顺便说一句,有比 Swing 的实现更好的第 3 方原生外观皮肤)很多人更喜欢使用 AWT 的 FileDialog 而不是 Swing 的 FileChooser,因为它提供了大多数人习惯的平台文件对话框,而不是“奇怪的”自定义 Swing 对话框。

        【讨论】:

        【解决方案9】:

        Swing vs AWT。基本上,AWT 最先出现,是一组重量级的 UI 组件(意味着它们是操作系统对象的包装器),而 Swing 则建立在 AWT 之上,并带有一组更丰富的轻量级组件。

        任何重要的 Java UI 工作都是在 Swing 而不是 AWT 中完成的,AWT 主要用于小程序。

        【讨论】:

        • 有没有什么情况下awt比swing更有用/建议使用?
        • 它曾经是相关的...... 10 年前。
        • @Pacerier 他说的是 AWT,而不是 SWT
        猜你喜欢
        • 2012-01-27
        • 2018-10-17
        • 2010-12-27
        • 2016-05-17
        • 2014-06-14
        • 2010-10-02
        • 2011-12-12
        • 2010-09-16
        • 2012-03-14
        相关资源
        最近更新 更多