JPanel、JFrame、JComponent 和 JApplet 之间的区别
Posted
技术标签:
【中文标题】JPanel、JFrame、JComponent 和 JApplet 之间的区别【英文标题】:Difference between JPanel, JFrame, JComponent, and JApplet 【发布时间】:2011-03-30 16:47:22 【问题描述】:我正在制作一个有趣的物理模拟器,当我试图找出所有这些 J 之间的区别时,我正在查找图形教程。 有人可以详细说明它们,或者提供指向有用来源的链接吗?
【问题讨论】:
【参考方案1】:这些类是 Java UI 设计的常见扩展点。首先,要意识到他们之间不一定有太多直接关系,所以试图找到他们之间的关系可能会适得其反。
JApplet - 一个基类,可让您编写将在浏览器上下文中运行的代码,例如交互式网页。这很酷,但它带来了局限性,这是它在现实世界中表现出色的代价。当您想在网页中拥有自己的 UI 时,通常会使用 JApplet。我一直想知道为什么人们不利用小程序来存储会话状态,因此不需要数据库或 cookie。
JComponent - 打算与 Swing 交互的对象的基类。
JFrame - 用来表示一个窗口应该有的东西。这包括边框(可调整大小的y/n?)、标题栏(应用程序名称或其他消息)、控件(允许最小化/最大化?)和各种系统事件的事件处理程序,如“窗口关闭”(允许应用程序退出吗?)。
JPanel - 用于将其他元素聚集在一起的通用类。这对于使用可视布局或提供的布局管理器之一更为重要,例如gridbaglayout 等。例如,您有一个比您保留的区域大的文本框。将文本框放在滚动窗格中,然后将该窗格放入 JPanel。那么当你放置JPanel时,它在布局方面会更易于管理。
【讨论】:
【参考方案2】:JFrame 和 JApplet 是***容器。如果您希望创建桌面应用程序,您将使用 JFrame,如果您计划在浏览器中托管您的应用程序,您将使用 JApplet。
JComponent 是所有 Swing 组件的抽象类,您可以将它用作新组件的基类。 JPanel 是一个简单可用的组件,您几乎可以将其用于任何事情。
由于这是一个有趣的项目,最简单的方法是使用 JPanel,然后将其托管在 JFrame 或 JApplet 中。 Netbeans 有一个带有简单示例的 Swing 视觉设计器。
【讨论】:
【参考方案3】:您可能会发现在 Oracle 网站上查找类很有用,例如:
https://docs.oracle.com/en/java/javase/15/docs/api/java.desktop/javax/swing/JFrame.html
您可以看到JFrame
扩展了JComponent
和JContainer
。
JComponent
是一个可以绘制的基本对象。 JContainer
对此进行了扩展,以便您可以向其中添加组件。 JPanel
和 JFrame
都扩展了 JComponent
以便您可以向它们添加内容。 JFrame
提供了一个窗口,而JPanel
只是一个进入窗口内部的面板。
【讨论】:
附带说明,继承链对于一些 Swing 组件来说是荒谬的。它往往会使 IDE 中的代码完成变得毫无用处,并使 javadocs 变得混乱。他们真的需要重写那件事 我想指出的是,JFrame 并没有扩展 JComponent 或 JContainer,而是按顺序扩展 java.awt.Container 和 java.awt.Component。 @LucasMorgan 他们一定让 JFrame 比我想象的更少依赖 Swing。由于它使用 AWT,我想知道您是否可以在 JApplet 中使用 JFrame。以上是关于JPanel、JFrame、JComponent 和 JApplet 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章
如何为 JFrame 上的 JComponent 添加滚动功能?
无论 JComponent 是啥焦点,如何为 JFrame 进行键绑定?