每当我读到 Swing 时,他们都会说它们是轻量级组件。所以我只是用谷歌搜索了 Swing,发现这意味着 Swing 不依赖于本地同行。这就是他们被称为“轻量级”的原因吗?我的意思是轻量级,我认为 Swing 组件占用的内存可能比 AWT 组件少。不是这样吗?
3 回答
Swing被认为是轻量级的,因为它完全用 Java 实现,无需调用本机操作系统来绘制图形用户界面组件。
另一方面,AWT(Abstract Window Toolkit)是重量级的工具包,因为它只是调用操作系统来生成它的 GUI 组件。
来自AWT 和 Swing 中的绘画文章的 Swing 绘画系统的演变部分解释了轻量级和重量级之间的区别:
在为 JDK 1.0 开发原始 AWT API 时,只存在重量级组件(“重量级”意味着该组件具有它自己的不透明本机窗口)。这允许 AWT 严重依赖每个本机平台中的绘制子系统。
[...]
随着 JDK 1.1 中轻量级组件的引入(“轻量级”组件是重用其最接近的重量级祖先的本机窗口的组件),AWT 需要在共享 Java 代码中实现轻量级组件的绘制处理。
由于 Swing 是用 Java 实现的,它确实有一些性能劣势,但是,我听说最近的 Java 版本中性能有所提高。
Swing 的优势在于它有更多可用的组件,例如JTable
,JList
这些组件比 AWT 中提供的组件更具图形化和可扩展性,允许开发更多图形丰富的应用程序。
轻量级与重量级是如何实现 UI 组件的问题。重量级组件包装操作系统对象,轻量级组件没有。它们在 JDK 中严格实现。
这只是一个附录,在另一个上下文中解决了重量级与轻量级:编程模型。
In this context Swing is definitely heavyweight and complicated. It is not considered suitable for thin client implementation, and given the fact that today there are so many different devices, Swing is, in effect, dead technology, even though Oracle has not retired it...yet (also see JavaFX as an alternative).