首页 文章

Swing和AWT有什么区别?

提问于
浏览
202

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

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

8 回答

  • 5

    AWT是操作系统中存在的本机系统GUI代码的Java接口 . 虽然它尝试,但它在每个系统上都不会起作用 .

    Swing是一个或多或少的纯Java GUI . 它使用AWT创建一个操作系统窗口,然后将按钮,标签,文本,复选框等图片绘制到该窗口中,并响应所有鼠标点击,关键条目等,自行决定做什么而不是让操作系统处理它 . 因此,Swing是100%可移植的并且在不同平台上是相同的(尽管它是可换肤的并且具有“可插拔的外观和感觉”,可以使它看起来或多或少看起来像本机窗口和小部件看起来如何) .

    这些是非常不同的GUI工具包方法,并且会产生很多后果 . 对您的问题的完整答案将尝试探索所有这些 . :)这是一对夫妇:

    AWT是一个跨平台的接口,因此即使它使用底层操作系统或本机GUI工具包来实现其功能,它也无法访问这些工具包可以执行的所有操作 . 可能不存在另一个平台上可能存在的高级或更新的AWT小部件 . 可能不支持在每个平台上不相同的小部件的功能,或者更糟糕的是,它们可能在每个平台上以不同方式工作 . 人们过去投入了大量精力来使他们的AWT应用程序在不同平台上一致地工作 - 例如,他们可能会尝试从Java调用本机代码 .

    因为AWT使用本机GUI小部件,所以操作系统知道它们并处理它们彼此前面等等,而Swing小部件是从操作系统的角度来看窗口内无意义的像素 . Swing本身可以处理小部件的布局和堆叠 . 混合AWT和Swing是非常不受支持的,并且可能导致荒谬的结果,例如本机按钮会遮挡它们所在的对话框中的所有其他内容,因为其他所有内容都是使用Swing创建的 .

    因为除了原生GUI窗口提供的原始图形例程之外,Swing尝试用Java完成所有可能的事情,因此与AWT相比,它曾经导致相当大的性能损失 . 不幸的是,这让Swing很慢 . 然而,由于更优化的JVM,更快的机器和(我假设)Swing内部的优化,这在过去几年中急剧缩小 . 今天,Swing应用程序可以足够快地运行,以便可维护甚至是zippy,并且几乎与使用本机小部件的应用程序无法区分 . 有些人会说到达这一点花了太长时间,但大多数人会说这是值得的 .

    最后,您可能还想查看SWT(用于Eclipse的GUI工具包,以及AWT和Swing的替代方法),这有点回归到AWT通过Java访问本机Widgets的想法 .

  • 11

    已经大家提到的基本差异是一个是 heavy weight 而另一个是 light weight . 让我解释一下,基本上重量级意味着什么,当你使用awt组件时,用于获取视图组件的本机代码 is generated by the Operating System ,这就是为什么它的外观和感觉发生了变化 from OS to OS. 在swing组件中它的责任是 JVM to generate the view for the components. 我看到的另一个陈述是 swing is MVC based and awt is not.

  • 14

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

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

  • 8

    至于AWT可能比Swing更有用 -

    • 您可能针对的是较旧的JVM或平台,它不需要安装较新的Java插件 . 我不确定当前最广泛安装的Java插件版本是什么 - 今天可能会有所不同 .

    • 有些人更喜欢AWT的原生外观而不是Swing 's '并不完全有' platform skins. (There are better 3rd party native looking skins than Swing'的实现BTW)很多人更喜欢使用AWT 's FileDialog over Swing'的FileChooser,因为它给了大多数人习惯的平台文件对话框而不是'weird'自定义Swing .

  • 3

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

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

    Swing组件称为"lightweight",因为它们不需要本机OS对象来实现其功能 . JDialogJFrame 是重量级的,因为他们确实有同伴 . 因此,像 JButtonJTextArea 等组件是轻量级的,因为它们没有OS对等体 .

    peer是操作系统提供的小部件,例如按钮对象或输入字段对象 .

  • 9

    Swing:

    • Swing是java基础类的一部分 .

    • Swing组件与平台无关 .

    • Swing组件是轻量级组件,因为swing位于awt的顶部 .

    AWT:

    • AWT被称为抽象窗口工具 .

    • AWT组件与平台有关 .

    • AWT组件是重量级组件 .

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

    • awt不是基于mvc的 .

    • swing工作得更快 .

    • awt无法更快地运行 .

    • 摆动部件重量轻 .

    • awt组件重量很重 .

    • swing占用的内存空间更少 .

    • awt占用更多内存空间 .

    • swing组件与平台无关 .

    • awt取决于平台 .

    • swing需要javax.swing包 .

    • awt需要javax.awt包 .

  • 220

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

    swings 1 . Swing占用的内存空间更少2 . Swing组件与平台无关3 . Swing需要javax.swing包

相关问题