【发布时间】:2010-09-29 20:07:18
【问题描述】:
每当我读到 Swing 时,他们都会说它们是轻量级组件。所以我只是用谷歌搜索了 Swing,发现这意味着 Swing 不依赖于本地同行。这就是他们被称为“轻量级”的原因吗?我的意思是轻量级,我认为 Swing 组件占用的内存可能比 AWT 组件少。不是这样吗?
【问题讨论】:
每当我读到 Swing 时,他们都会说它们是轻量级组件。所以我只是用谷歌搜索了 Swing,发现这意味着 Swing 不依赖于本地同行。这就是他们被称为“轻量级”的原因吗?我的意思是轻量级,我认为 Swing 组件占用的内存可能比 AWT 组件少。不是这样吗?
【问题讨论】:
Swing 被认为是轻量级的,因为它完全用 Java 实现,无需调用本机操作系统来绘制图形用户界面组件。
另一方面,AWT(抽象窗口工具包)是重量级工具包,因为它只是调用操作系统以生成其 GUI 组件。
Painting in AWT and Swing 文章中的Evolution of the Swing Paint System 部分解释了轻量级和重量级之间的区别:
当原始 AWT API 是 仅针对 JDK 1.0 开发 存在重量级组件 (“重量级”是指 组件有它自己的不透明原生 窗户)。这允许 AWT 依赖 严重依赖于每个中的油漆子系统 原生平台。
[...]
有 引入轻量级 JDK 1.1 中的组件(“轻量级” 组件是一个重用 其最近的本机窗口 重量级祖先),需要 AWT 实施油漆处理 共享中的轻量级组件 Java 代码。
由于 Swing 是用 Java 实现的,它确实存在一些性能劣势,但是,我听说在最近的 Java 版本中性能有所提高。
Swing 的优势在于它有更多可用的组件,例如 JTable 和 JList,它们比 AWT 中提供的组件更具图形化和可扩展性,允许开发更多图形丰富的应用程序。
【讨论】:
轻量级与重量级是如何实现 UI 组件的问题。重量级组件包装操作系统对象,轻量级组件没有。它们在 JDK 中严格实现。
【讨论】:
这只是一个附录,在另一个上下文中处理重量级与轻量级:编程模型。
在这种情况下,Swing 绝对是重量级和复杂的。 它被认为不适合瘦客户端实现,并且考虑到当今有这么多不同的设备,Swing 实际上是一种死技术,尽管 Oracle 还没有淘汰它......但是(另见 JavaFX 作为替代)。
【讨论】: