10

What is the difference between JPanel and JFrame and relationship to lightweight, heavyweight?

4

4 回答 4

20

JPanel 是允许将多个 UI 组件放在一起的容器。JFrame 是使用 Swing 编写的窗口。

所有 Swing 组件都是所谓的“轻量级”组件,因为它们是用 java 编写的。例如,如果您运行 Swing 应用程序并尝试使用 UI 分析工具(例如 windows 中的 WinSpy)对其进行分析,您只会看到一个元素:窗口 (JFrame) 本身。所有其他组件都是从操作系统的角度绘制的。

重量级 API - AWT 使用 OS 提供的可移植元素。由于 java 必须在各种操作系统之间移植,所以 AWT 非常有限。它仅实现所有平台支持的屏幕元素的最小子集。然而,AWT 元素直接映射到适当的平台元素,因此 UI 发现工具会看到它们。这些元素被称为“重量级”。

于 2012-12-07T18:54:46.973 回答
3

像“AWT”组件这样的重量级组件必须在特定平台上使用本机 GUI 进行绘制。

像“Swing”组件这样的轻量级组件是由 java 绘制的,不依赖于原生 GUI。

于 2014-11-30T07:31:25.220 回答
2

Swing 和 AWT 之间的基本区别在于 Swing API 是纯 Java 库,即它们根本不依赖本地库来绘制图形组件。由于此功能,它们在所有平台上提供一致的外观和感觉。AWT 库需要原生图形库的支持,并且它们的一些 GUI 组件在不同平台上看起来不同。此外,Swing 组件本质上不是线程安全的,您必须明确地编写同步代码来操作或重绘它们,而 AWT 组件在多线程环境中是可以信任的。AWT 组件被称为重量级组件,因为它们依赖于本地库。Swing 组件因其独立于本机库而被称为轻量级组件。

于 2013-06-08T03:19:40.957 回答
1

JFrame 是一个带有接口框的 Swing 容器,可以是一个独立的应用程序(它具有最小化、最大化和退出功能的顶部框),而 JPanel 是 JFrame 的一切(一个 Swing 容器)减去成为一个独立的人。要使 JPanel 工作,它必须位于框架之类的内部,例如 JFrame。

另一个答案对轻量级和重量级组件有很好的定义。

使用:我在 JFrames 中使用 JPanel 来轻松运行集成在一起的多线程程序(我的类中有一个 JPanel 可运行类,它扩展了 JFrame,我将其作为自己的线程运行,并且 JPanel 类可以更改 JFrame 类中变量的值)。我用它来轻松地让不同的线程相互交互。**您可以在一个 JFrame 中拥有多个 JPanel。

于 2012-12-07T18:56:19.740 回答