JPanel与Java中的JFrame

JPanel与Java中的JFrame,java,swing,jframe,jpanel,Java,Swing,Jframe,Jpanel,我正在学习JavaGUI。我学习创建窗口的方法是继承或扩展JFrame类,使用它很好,因为JFrame包含窗口的所有属性。现在,如果我想向这个窗口添加一些内容,我需要使用add()方法。但是今天我遇到了JPanel,它也创建了一个窗口,我们可以通过jpanelObjec.add()添加东西 这两种方法有什么区别?它们是否有某种关联?JFrame是窗口;它可以有一个或多个JPanel实例JPanel不是窗口 您需要一个Swing教程: 您不应该不必要地扩展JFrame类(仅当您向JFrame类添加

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


这两种方法有什么区别?它们是否有某种关联?

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

您需要一个Swing教程:


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

JFrame

JFrame
扩展
组件
容器

它是一个顶级容器,用于表示窗口的最低要求。这包括
边框
s、可调整大小(JFrame是否可调整大小?)、标题栏、控件(允许最小化/最大化?)以及各种
事件
的事件处理程序,如
窗口关闭
窗口打开

JPanel

JPanel
扩展了
Component
Container
JComponent

它是一个泛型类,用于将其他
组件
组合在一起

  • 当使用
    LayoutManager
    s时,它很有用,例如
    GridLayout
    f.i将组件添加到不同的
    JPanel
    s,然后将组件添加到
    JFrame
    以创建gui。在布局和可重用性方面,它将更易于管理

  • 当在Swing中绘制/绘制时,它也很有用,您可以覆盖
    paintComponent(..)
    ,当然还可以享受双缓冲的全部乐趣

Swing GUI如果没有顶级容器(
JWindow
Window
JFrame
Frame或
Applet
)就无法存在,而可能没有
JPanel
s。类似的问题:实际上,它没有扩展
JComponent
JContainer