当前位置:  开发笔记 > 编程语言 > 正文

Swing和AWT有什么区别?

如何解决《Swing和AWT有什么区别?》经验,为你挑选了7个好方法。

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

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



1> skiphoppy..:

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的想法.


这是一篇官方的Java文章,确认混合是固定的:http://www.oracle.com/technetwork/articles/java/mixing-components-433992.html

2> Access Denie..:

已经大家提到的基本差异是一个是重量级而另一个是重量轻.让我解释一下,基本上重量级的意思是当你使用awt组件时,用于获取视图组件的本机代码是由操作系统生成的,这就是为什么它的外观从操作系统变为操作系统的原因.在swing组件中,JVM负责生成组件的视图.我看到的另一个声明是,swing是基于MVC而awt不是.


实际上Swing使用Model-Delegate方法,该方法派生自MVC方法,其中View和Controller组合为一个Delegate结构

3> cletus..:

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

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



4> Nate..:

至于AWT可能比Swing更有用 -

您可能会瞄准不支持Swing的旧JVM或平台.如果您正在构建Applet,那么以前就会发挥作用 - 您希望以最低的公分母为目标,这样人们就不必安装更新的Java插件.我不确定当前最广泛安装的Java插件版本是什么 - 今天可能会有所不同.

有些人更喜欢AWT的原生外观而不是Swing的"不太好"的平台皮肤.(有更好的第三方原生外观,而不是Swing的实现BTW)很多人更喜欢使用AWT的FileDialog而不是Swing的FileChooser,因为它提供了大多数人习惯的平台文件对话框而不是"奇怪的"自定义Swing.


但是对于最后一个,我们还可以创建一个看起来像Windows文件对话框的FileChooser(但没有自动完成)http://stackoverflow.com/q/17630055/2534090

5> 小智..:

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

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

Swing组件称为"轻量级",因为它们不需要本机OS对象来实现其功能.JDialog并且JFrame是重量级的,因为他们确实有同伴.所以类似的组件JButton, JTextArea等等,都是轻量级的,因为他们没有一个操作系统等.

对等是由操作系统,提供诸如按钮对象或记录域对象的小部件.



6> 小智..:

摇摆:

    Swing是java基础类的一部分.

    Swing组件与平台无关.

    摆动组件是轻量级组件,因为摆动位于awt的顶部.

AWT:

    AWT被称为抽象窗口工具.

    AWT组件与平台有关.

    AWT组件是重量级组件.



7> 小智..:

swing组件提供了非常灵活的用户界面,因为它遵循模型视图控制器(mvc).

awt不是以mvc为基础的.

挥杆工作得更快.

awt工作得不快.

摆动部件重量轻.

awt组件重量很重.

swing占用的内存空间更少.

awt占用更多的内存空间.

swing组件与平台无关.

awt取决于平台.

swing需要javax.swing包.

awt需要javax.awt包.


我不认为swing比AWT工作得更快,因为AWT使用的是操作系统中已有的本机代码(gui代码),但swing从头开始构建每个组件.所以AWT可能会更快.你能说我的观点是什么,你说**摆动的速度更快**?谢谢.
推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有