AWT 与 Swing .... 为什么使用 Swing?

cok*_*e28 4 java swing awt

我一直在阅读有关 AWT 与 Swing 的文章,但我不太清楚 Swing 的工作原理。我读过 Swing 位于 AWT 之上并且它是轻量级的(与 AWT 相对)。我的问题是“如果它使用 AWT 并继承 AWT 容器,它如何成为轻量级?” 我很迷惑。为什么使用 Swing over AWT 那么....为什么不直接使用 AWT?AWT 会减慢 Swing 组件的速度吗?

Mad*_*mer 5

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

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

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

那么为什么要使用 Swing 而不是 AWT...为什么不直接使用 AWT 呢?

这是见仁见智的问题,但一般来说,AWT 已被 Swing 取代,并提供了更灵活的图形 API 可供开发。因为它不依赖于平台本机组件,这意味着您可以自由开发所需的组件,并且可以跨多个平台运行。

Swing 还借用了 AWT API 的大部分内容,包括事件队列

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

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

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


Jun*_*san 5

要了解 Swing 是如何比 AWT 轻量级的,您需要了解“peer”的概念。对等点是操作系统提供的小部件,例如按钮对象或输入字段对象。

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

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

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