繁体   English   中英

AWT vs. Swing ...为什么要使用Swing?

[英]AWT vs. Swing…why use Swing?

我一直在阅读AWT vs Swing,但我对Swing的工作方式并不十分清楚。 我已经读过Swing位于AWT之上并且它是轻量级的(而不是AWT)。 我的问题是“如果它使用AWT并继承AWT容器,它怎么能轻量级?” 我很困惑。 为什么不使用SwT而不是AWT呢?为什么不使用AWT呢? AWT会减慢Swing组件的速度吗?

“如果使用AWT并继承AWT容器,它怎么能轻量级?”

轻量级意味着Swing组件没有自己的本机对等体,它共享一个(公共)本地对等体。 这个本地对等体来自它添加到的AWT容器(通常是窗口),并在该容器层次结构中的所有Swing组件之间共享......

AWT提供“重”提升,连接到本机操作系统并提供通过其渲染Swing组件的核心通道。 它还提供了许多本机集成,例如可以由Swing使用的SystemTrayDesktop和每像素半透明API

为什么不使用SwT而不是AWT呢?为什么不使用AWT呢?

这是一个观点问题,但通常,AWT被Swing取代,并提供了一个更灵活的图形API,可以从中开发。 因为它不依赖于平台本机组件,所以它意味着您可以自由地开发所需的组件,并且可以在多个平台上运行。

Swing还借用了大部分AWT API,包括Event Queue

JTreeJTable将是我使用Swing over AWT的第一个论点;)

AWT会减慢Swing组件的速度吗?

并不是的。 AWT已经使用DirectX和OpenGL管道已有一段时间了,因为它是本机API和Java API之间的转换层,所以它通常非常擅长它的功能。 此外,没有AWT,你没有Swing ......

要了解Swing如何轻量级而不是AWT,您需要了解“同行”的概念。 对等体是由操作系统提供的窗口小部件,例如按钮对象或入口字段对象。

AWT组件通常是一个组件类,它包含具有对等接口类型的引用。 此参考指向本机对等实现。

谈到Swing,一切都变得清晰直接。 除顶级容器外,Swing的实现不依赖于单个平台。 它拥有所有控制和资源。 Swing需要的是用于驱动系统的事件输入,以及从顶级AWT容器继承的图形,字体和颜色。 普通的Swing组件可以看作是AWT容器上的逻辑区域。

Swing组件称为“轻量级”,因为它们不需要本机OS对象来实现其功能。 诸如JButton,JTextArea等Swing组件是轻量级的,因为它们没有OS对等体。 很少有Swing组件可能需要OS对等体,并且会产生与AWT类似的性能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM