Swing组件是轻量级的吗?

5
每当我阅读有关Swing的文章时,他们都说它们是轻量级组件。所以我刚刚搜索了一下Swing并发现它意味着Swing不依赖于本地对等体。这就是为什么它们被称为“轻量级”吗?我的意思是,通过“轻量级”,我认为Swing组件占用的内存可能比AWT组件少。那不是这样吗?
3个回答

12

Swing被认为是轻量级的,因为它完全在Java中实现,而不需要调用本地操作系统来绘制图形用户界面组件。

另一方面,AWT(抽象窗口工具包)是重量级工具包,因为它仅仅调用操作系统来生成其GUI组件。

Painting in AWT and Swing文章中的Evolution of the Swing Paint System部分解释了轻量级和重量级之间的区别:

当JDK 1.0为原始AWT API开发时,只存在重量级组件(“重量级”意味着该组件有自己的不透明本地窗口)。这使得AWT可以在每个本地平台上大量依赖绘画子系统。

[...]

随着JDK 1.1中轻量级组件的引入(“轻量级”组件是指重用其最近的重量级祖先的本地窗口),AWT需要在共享Java代码中实现轻量级组件的绘画处理。

由于Swing是用Java实现的,因此它确实有一些性能劣势,但是我听说在Java的最新版本中,性能已经得到了提高。

Swing的优势在于它有更多可用的组件,例如JTableJList,这些组件比AWT提供的组件更具图形化和可扩展性,可以开发更多图形丰富的应用程序。


我同意使用Swing有太多很酷的东西 - 特别是工具提示和图标。 - arshad
在Java 6中,Windows外观委托给操作系统来绘制轻量级组件(参见http://weblogs.java.net/blog/chet/archive/2006/02/these_are_some.html)。 - Dan Dyer

8

轻量级和重量级是关于UI组件如何实现的问题。重量级组件包装操作系统对象,而轻量级组件则不包装。它们是严格在JDK中实现的。


关于组件占用的内存,您有什么可以说的吗?Swing组件是否占用较少的内存? - arshad
1
很难说。轻量级组件可能会占用更多的空间,因为操作系统会处理一些重量级组件的东西。或者操作系统对象的开销可能非常大。或者仅仅是与这些对象进行接口可能有巨大的开销。 - cletus
除此之外,它高度依赖于您使用的LAF(外观和感觉)。这是Swing的另一个优点:您可以仅用几行代码更改LAF。 - jfpoilpret

0

这只是一个补充说明,涉及到另一个方面的重量级和轻量级:编程模型。

在这个背景下,Swing 明显是重量级和复杂的。它不适合于瘦客户端实现,并且考虑到今天有如此多不同的设备,Swing 实际上已经是过时的技术,尽管 Oracle 还没有将其淘汰...(也可以看看 JavaFX 作为替代方案)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接