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

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

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

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

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

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

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

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

另一个答案是轻量级和重量级组件的良好定义。

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

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