Java中的JPanel与JFrame

Posted

技术标签:

【中文标题】Java中的JPanel与JFrame【英文标题】:JPanel vs JFrame in Java 【发布时间】:2012-10-24 03:03:26 【问题描述】:

我正在学习 Java gui。我学习创建窗口的方法是继承或扩展JFrame 类,使用它很好,因为JFrame 包含窗口的所有属性。现在如果我想在这个窗口中添加一些东西,我需要使用add() 方法。但是今天我遇到了JPanel,它也创建了一个窗口,我们可以通过jpanelObjec.add() 添加东西。

这两种方法有什么区别?它们有什么关联吗?

【问题讨论】:

类似问题:***.com/questions/3497889/… 【参考方案1】:

您不应不必要地扩展 JFrame 类(仅当您向 JFrame 类添加额外功能时)

JFrame

JFrame 扩展了 ComponentContainer

它是一个***容器,用于表示一个窗口的最低要求。这包括Borders、可调整大小(JFrame 是否可调整大小?)、标题栏、控件(允许最小化/最大化?)和各种Events 的事件处理程序,如windowClosewindowOpened 等。

JPanel

JPanel 扩展 ComponentContainerJComponent

它是一个通用类,用于将其他Components 组合在一起。

在使用 LayoutManagers 时很有用,例如GridLayout f.i 将组件添加到不同的 JPanels,然后将其添加到 JFrame 以创建 gui。就Layout 和可重用性而言,它将更易于管理。

这对于在 Swing 中绘画/绘图时也很有用,您可以覆盖 paintComponent(..),当然还有双缓冲的全部乐趣。

如果没有***容器(如(JWindowWindowJFrameFrameApplet),Swing GUI 就无法存在,而没有JPanels 则它可能存在。

【讨论】:

实际上,JFrame 并没有扩展 JComponentJContainer【参考方案2】:

JFrame 是窗口;它里面可以有一个或多个JPanel 实例。 JPanel 不是窗口。

你需要一个 Swing 教程:

http://docs.oracle.com/javase/tutorial/uiswing/

【讨论】:

以上是关于Java中的JPanel与JFrame的主要内容,如果未能解决你的问题,请参考以下文章

带有 boxLayout 的 JScrollPane 中的 Java 可拖动 JPanel

如何从另一个子 JPanel(Java Swing)中的输入触发一个子 JPanel 中的操作?

JPanel 中的 Java 自定义拖放

jpanel -java中的垂直居中jbutton

JAVA中的JPanel怎么使用呢?

单击jPanel(Java)时如何调用函数?