有人能给我解释一下Swing和AWT的区别吗?
在某些情况下,AWT比swing更有用/更被建议使用,或者反之亦然?
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 -更有用
摇摆不定:
AWT:
< >强AWT 1 . AWT占用更多的内存空间 2。AWT依赖于平台 3.AWT需要javax。awt包< / p >
< >强波动 1 . Swing占用较少的内存空间 2。Swing组件是平台独立的 3.Swing需要javax。swing包< / p >
AWT和Swing之间的这种差异导致了几个后果。
JDialog
JFrame
JButton
JTextArea
同行是操作系统提供的小部件,例如A 按钮对象或输入字段对象
Java 8