Swing和AWT的区别是什么?

有人能给我解释一下Swing和AWT的区别吗?

在某些情况下,AWT比swing更有用/更被建议使用,或者反之亦然?

229645 次浏览

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

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

AWT是一个Java接口,可以连接到操作系统中的本机系统GUI代码。它不会在每个系统上都一样,尽管它尝试了。

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的替代方案),它在某种程度上是通过Java访问本机widget的AWT思想的回归。

每个人都提到的基本区别是一个是重的重量,另一个是重量轻。让我解释一下,基本上,术语重量级的意思是,当你使用awt组件时,本机代码用于获取视图组件是由操作系统生成的,这就是为什么它的外观和感觉会发生变化

至于什么时候AWT可能比Swing -更有用

  • 您可能针对的是不支持Swing的旧JVM或平台。如果你正在构建applet,这一点曾经非常有用——你想要以最低公分母为目标,这样人们就不必安装更新的Java插件。我不确定目前安装最广泛的Java插件版本是什么——今天可能有所不同。
  • 有些人更喜欢AWT的原生外观,而不是Swing的“不太好”平台皮肤。(顺便说一下,有比Swing实现更好的第三方本地外观皮肤)很多人更喜欢使用AWT的FileDialog而不是Swing的FileChooser,因为它提供了大多数人习惯的平台文件对话框,而不是“奇怪的”自定义Swing。
    swing组件提供了非常灵活的用户界面,因为它 遵循模型视图控制器(mvc).
  • Awt不是基于MVC的。
  • Swing工作更快。
  • Awt的工作速度并不快。
  • 摆动部件重量轻。
  • Awt组件重量很重。
  • Swing占用较少的内存空间。
  • Awt占用较多内存空间。
  • Swing组件是平台独立的。
  • Awt依赖于平台。
  • Swing require javax。摇摆不定的包。
  • Awt需要javax。awt包。

摇摆不定:

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

AWT:

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

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

< >强波动 1 . Swing占用较少的内存空间 2。Swing组件是平台独立的 3.Swing需要javax。swing包< / p >

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

AWT是OS之上的一层薄薄的代码,而Swing要大得多。 Swing还有非常丰富的功能。使用AWT,您必须这样做 你可以自己实现很多东西,而Swing内置了它们。为 gui密集型工作,与Swing相比,AWT的使用感觉非常原始。 因为Swing本身实现了GUI功能,而不是依赖于 它可以在Java运行的所有平台上提供更丰富的环境。 AWT在所有平台上提供相同的功能方面受到更多限制 因为并不是所有平台都在相同的方式中实现相同外观的控件 方式。< / p > Swing组件被称为“轻量级的”,因为它们不需要 来实现它们的功能。JDialogJFrame是 重量级的,因为他们有对手。像JButton这样的组件, JTextArea等是轻量级的,因为它们没有操作系统对等体
同行是操作系统提供的小部件,例如A 按钮对象或输入字段对象

Java 8

摇摆不定的

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

AWT -抽象窗口工具包

  • 平台的依赖
  • AWT组件是重量级的
  • 包java.awt