Answers:
AWT是OS中存在的本机系统GUI代码的Java接口。尽管它会尝试,但在每个系统上都无法正常工作。
Swing或多或少是纯Java GUI。它使用AWT创建一个操作系统窗口,然后在该窗口中绘制按钮,标签,文本,复选框等的图片,并响应您的所有鼠标单击,键输入等,从而自行决定要做什么。而不是让操作系统来处理它。因此,Swing是100%可移植的,并且在各个平台上都是相同的(尽管它是可换肤的,并且具有“可插入的外观”,可以使它看起来或多或少类似于本机窗口和小部件的外观)。
这些是GUI工具包的截然不同的方法,并且会带来很多后果。完整回答您的问题将尝试探索所有这些问题。:)这是一对:
AWT是一个跨平台的界面,因此,即使它使用底层操作系统或本机GUI工具包来实现其功能,它也无法提供对这些工具包可以执行的所有操作的访问。一个平台上可能存在的高级或更新的AWT窗口小部件可能在另一平台上不受支持。每个平台上不同的小部件功能可能不受支持,或者更糟的是,它们在每个平台上的工作方式可能不同。人们过去花了很多精力来使他们的AWT应用程序在各个平台上都能一致地工作-例如,他们可能尝试从Java调用本机代码。
由于AWT使用本机GUI小部件,因此您的OS知道它们并进行处理,以此类推,而从操作系统的角度来看,Swing小部件是窗口内无意义的像素。Swing本身可以处理小部件的布局和堆叠。高度不支持将AWT和Swing混合使用,并且可能导致荒谬的结果,例如本机按钮会使它们所在的对话框中的其他内容模糊不清,因为其他所有内容都是使用Swing创建的。
因为Swing试图用Java来做所有可能的事情,而不是由本机GUI窗口提供的非常原始的图形例程,所以与AWT相比,它通常会导致性能下降。不幸的是,这使得Swing赶上了缓慢。但是,由于更优化的JVM,更快的机器以及(我认为)Swing内部的优化,在过去的几年中,这种情况已大大减少。如今,Swing应用程序可以足够快地运行,以使其易于维护甚至是zippy,并且与使用本机小部件的应用程序几乎没有区别。有人会说到现在为止花了太长时间,但大多数人会说这是值得的。
最后,您可能还想看看SWT(用于Eclipse的GUI工具包,是AWT和Swing的替代品),这有点像是通过Java访问AWT的想法。
大家都已经提到的基本区别是一个是重量重,另一个是重量轻。让我解释一下,基本上,“重量级”一词的含义是,当您使用awt组件时,用于获取视图组件的本机代码是由操作系统生成的,这就是为什么它的外观在操作系统之间变化的原因。与挥杆组件一样,JVM负责为组件生成视图。我看到的另一种说法是swing是基于MVC的,而awt不是。
Swing vs AWT。基本上,首先是AWT,它是一组重量级的UI组件(意味着它们是操作系统对象的包装器),而Swing构建在AWT之上,具有一组更丰富的轻量级组件。
任何重要的Java UI工作都是在Swing中完成的,而不是AWT,后者主要用于applet。
至于AWT可能比Swing更有用-
AWT和Swing之间的这种差异会导致多种后果。
AWT是操作系统之上的一薄层代码,而Swing则大得多。Swing还具有非常丰富的功能。使用AWT,您必须自己实现很多事情,而Swing是内置的。对于GUI密集型工作,与Swing相比,AWT感觉非常原始。由于Swing本身实现GUI功能而不是依赖主机OS,因此它可以在Java运行的所有平台上提供更丰富的环境。AWT在所有平台上提供相同功能的局限性更大,因为并非所有平台都以相同方式实现外观相同的控件。
Swing组件被称为“轻量级”,因为它们不需要本机OS对象即可实现其功能。JDialog
并且JFrame
是重量级的,因为他们确实有同龄人。所以组件喜欢JButton
,
JTextArea
等等,都是轻量级的,因为他们没有一个操作系统等。
阿对等是由操作系统,提供诸如按钮对象或记录域对象的小部件。
AWT 1。AWT占用更多的存储空间2。AWT依赖于平台3。AWT需要javax.awt包
摇摆 1。摆动占用较少的存储空间2。摆动组件是独立于平台的3。Swing需要javax.swing包