Swing和AWT有什么区别?

有人可以解释我什么是Swing和AWT之间的区别?

是否有任何情况下,AWT比挥杆更有用/build议使用,反之亦然?

AWT是操作系统中本地系统GUI代码的Java接口。 尽pipe它尝试,但是在每个系统上都不一样。

Swing是一个或多或less纯Java的GUI。 它使用AWT创build一个操作系统窗口,然后将button,标签,文本,checkbox等的图片绘制到该窗口中,并响应所有的鼠标点击,键入等等,自行决定要做什么而不是让操作系统来处理它。 因此,Swing是100%可移植的,跨平台是相同的(虽然它是可换肤的,并具有“可插入的外观和感觉”,可以使它看起来像本地窗口和小部件看起来多less)。

这些对于GUI工具包来说是非常不同的方法,并且有很多的后果。 你的问题的完整答案将尝试探索所有这些。 :)这里有一对夫妇:

AWT是一个跨平台的接口,所以即使它使用底层操作系统或本地GUI工具包来实现其function,但它不提供访问这些工具包所能做的所有事情。 在另一个平台上可能存在的高级或更新的AWT小部件可能不被支持。 在每个平台上都不相同的小部件的function可能不被支持,或者更糟的是,它们可能在每个平台上以不同的方式工作。 过去,人们花费大量精力来让AWT应用程序跨平台一致地工作,例如,他们可能会尝试从Java调用本地代码。

因为AWT使用本地GUI小部件,所以你的操作系统知道它们并且把它们放在彼此的前面,而从你的操作系统的angular度来看,Swing小部件在窗口内是没有意义的像素。 Swing自己处理你的小部件的布局和堆栈。 混合AWT和Swing是非常不受支持的,并且可能会导致荒谬的结果,例如原生button会隐藏所在对话框中的所有其他内容,因为其他所有内容都是使用Swing创build的。

因为Swing试图在Java中尽可能地做所有可能的事情,而不是由本地GUI窗口提供的非常原始的graphics例程,所以与AWT相比,它会带来相当大的性能损失。 这使得Swing不幸的很慢。 然而,由于更优化的JVM,更快的机器和(我认为)Swing内部的优化,在过去的几年中这个数字已经大幅缩水了。 如今,Swing应用程序可以运行得足够快,可以维护,甚至是活泼的,并且与使用本机小部件的应用程序几乎没有区别。 有人会说,要花很长时间才能达到这个目的,但是大多数人会说这是非常值得的。

最后,你可能还想看看SWT(用于Eclipse的GUI工具包,以及AWT和Swing的替代品),这有点回到AWT通过Java访问原生Widget的想法。

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

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

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

就当AWT比Swing更有用的时候 –

  • 您可能会针对不支持Swing的较旧的JVM或平台。 如果你正在构buildApplets,那么这个过程会真正起作用 – 你想要瞄准最低的共同点,所以人们不必安装一个更新的Java插件。 我不确定当前最广泛安装的Java插件版本是什么 – 今天可能会有所不同。
  • 有些人更喜欢AWT在Swing“不太有”平台皮肤上的本地外观。 (比Swing的实现有更好的第三方本地外观)BTW很多人喜欢使用AWT的FileDialog而不是Swing的FileChooser,因为它给了大多数人习惯的平台文件对话框,而不是“怪异”的自定义Swing对话框。

摇摆:

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

AWT:

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

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

AWT是操作系统上的一小部分代码,而Swing则更大。 Swing也有更丰富的function。 使用AWT,你必须自己实现很多东西,而Swing内置了它们。对于GUI密集型的工作,AWT相比Swing感觉非常原始。 由于Swing自身实现了GUIfunction,而不依赖于主机操作系统,因此它可以在运行Java的所有平台上提供更丰富的环境。 AWT在所有平台上提供相同的function都比较有限,因为不是所有的平台都以相同的方式实现相同的控制。

Swing组件称为“轻量级”,因为它们不需要本地OS对象来实现其function。 JDialogJFrame是重量级的,因为它们有一个对等体。 所以JButtonJTextArea等组件是轻量级的,因为它们没有OS对等体。

对等体是操作系统提供的一个小部件,例如button对象或input字段对象。

  • swing组件提供了非常灵活的用户界面,因为它遵循模型视图控制器(mvc)。
  • awt不是基于mvc的。
  • 摆动工作更快。
  • awt不能工作得更快。
  • 摆动组件重量轻。
  • awt组件重量很重。
  • 摆动占用较less的内存空间。
  • awt占用更多的内存空间。
  • 摆动组件是平台独立的。
  • awt是平台依赖的。
  • swing需要javax.swing包。
  • awt需要javax.awt包。

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

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