组件和轻量级/重量级之间的差异

时间:2012-12-07 18:42:09

标签: java swing awt

JPanel和JFrame有什么区别以及与轻量级,重量级的关系?

4 个答案:

答案 0 :(得分:17)

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

所有Swing组件都是所谓的“lightwight”组件,因为它们是用java编写的。例如,如果您运行Swing应用程序并尝试使用UI分析工具(例如Windows中的WinSpy)对其进行分析,则只能看到一个元素:窗口(JFrame)本身。从OS的角度来看,所有其他组件都是从中提取的。

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

答案 1 :(得分:3)

必须使用特定平台上的本机GUI绘制重量级组件,如“AWT”组件。

其中轻量级组件(如“Swing”组件)由java绘制,并且不依赖于本机GUI。

答案 2 :(得分:1)

JFrame是一个带有接口盒的Swing容器,可以是一个独立的应用程序(它的顶部框具有最小化,最大化和退出的能力),而JPanel是JFrame的一切(Swing容器)减去能够成为独立的。要使JPanel工作,它必须在像框架之类的东西里面,比如JFrame。

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

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

答案 3 :(得分:0)

Swing和AWT之间的基本区别在于Swing API纯粹是Java库,即它们完全不依赖于本机库来绘制图形组件。由于此功能,它们在所有平台上提供一致的外观。 AWT库需要本机图形库的支持,并且它们的一些GUI组件在不同平台上看起来不同。此外,Swing组件本身并不是线程安全的,您必须编写同步代码来操作或重绘它们,而AWT组件可以在多线程环境中受信任。 AWT组件称为重量级组件,因为它们依赖于本机库。 Swing组件由于其本机库的独立性而被称为轻量级。因此,Swing操作要快得多,因为Java运行时环境会处理每个操作,并且不需要向本机库委派事件或命令。