Swing和AWT有什么区别?

时间:2009-01-03 09:43:05

标签: java swing awt

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

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

9 个答案:

答案 0 :(得分:226)

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应用程序可以足够快地运行,以便可维护甚至是zippy,并且几乎与使用本机小部件的应用程序无法区分。有些人会说到达这一点花了太长时间,但大多数人会说它非常值得。

最后,您可能还想查看SWT(用于Eclipse的GUI工具包,以及AWT和Swing的替代方法),这有点回归到AWT通过Java访问本机Widgets的想法。

答案 1 :(得分:33)

众所周知的基本差异是一个重量,另一个是轻量级。让我解释一下,基本上重量级的意思是当你使用awt组件时,用于获取视图组件的本机代码是由操作系统生成的,这就是为什么它看起来和感觉从OS到OS的变化在swing组件中, JVM负责生成组件的视图。我看到的另一个声明是 swing是基于MVC而awt不是。

答案 2 :(得分:14)

Swing vs AWT。基本上AWT是第一个,它是一组重量级UI组件(意味着它们是操作系统对象的包装器),而Swing构建在AWT之上,具有更丰富的轻量级组件。

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

答案 3 :(得分:11)

至于AWT可能比Swing更有用 -

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

答案 4 :(得分:9)

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

AWT是操作系统之上的薄层代码,而Swing则要大得多。 Swing还具有更丰富的功能。使用AWT,你必须 自己实现了很多东西,而Swing内置了很多东西 与Swing相比,AWT在使用GUI时非常原始。 因为Swing本身实现了GUI功能而不是依赖于 托管操作系统,它可以在Java运行的所有平台上提供更丰富的环境。 AWT在所有平台上提供相同的功能更受限制 因为并非所有平台都实现相同的控件 方式。

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

  

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

答案 5 :(得分:7)

<强>摇摆:

  1. Swing是java基础类的一部分。
  2. Swing组件与平台无关。
  3. 摆动组件是轻量级组件,因为摆动位于awt顶部。
  4. <强> AWT:

    1. AWT被称为抽象窗口工具。
    2. AWT组件与平台有关。
    3. AWT组件是重量级组件。

答案 6 :(得分:5)

  • swing组件提供了非常灵活的用户界面,因为它 按照模型视图控制器(mvc)。
  • awt不是基于mvc的。
  • swing工作得更快。
  • awt不能更快地工作。
  • 摆动部件重量轻。
  • awt组件很重。
  • swing占用更少的内存空间。
  • awt占用更多的内存空间。
  • swing组件与平台无关。
  • awt取决于平台。
  • swing需要javax.swing包。
  • awt需要javax.awt包。

答案 7 :(得分:3)

<强> AWT 1。 AWT占用更多的内存空间 2。 AWT取决于平台 3。 AWT需要javax.awt包

<强>摆动 1。 Swing占用的内存空间更少 2。 Swing组件与平台无关 3。 Swing需要javax.swing包

答案 8 :(得分:0)

Java 8

摇摆

  • 它是Java基础类的一部分
  • Swing建立在AWT上
  • Swing组件轻巧
  • Swing支持可插入的外观
  • 与平台无关
  • 使用MVC:模型-视图-控制器架构
  • 包:javax.swing
  • 与Swing的其他组件不同, 重量很轻,顶层容器很重。

AWT-抽象窗口工具包

  • 取决于平台
  • AWT组件很重
  • 包java.awt