javax.swing.JFrame介绍
JFrame
简介
译自https://docs.oracle.com/javase/8/docs/api/
这是 Java 中 java.awt.Frame
的扩展版本,增加了对 JFC/Swing 组件架构的支持。关于如何使用 JFrame
的任务导向文档,可以在《Java 教程》的“如何创建窗口”部分找到。
JFrame
类与 Frame
类有一些不兼容之处。与所有其他 JFC/Swing 顶层容器一样,JFrame
将 JRootPane
作为其唯一的子组件。由根窗格提供的内容窗格(Content Pane)通常应包含 JFrame
所显示的所有非菜单组件。这与 AWT 中的 Frame
有所不同。
为了方便开发,JFrame
类重写了 add
、remove
和 setLayout
方法,使它们能够将调用委托给内容窗格的对应方法。例如,您可以通过以下方式将子组件添加到一个框架中:
frame.add(child);
子组件将被添加到内容窗格(ContentPane)中。内容窗格始终不为空,若尝试将其设置为 null
,JFrame
会抛出异常。默认的内容窗格使用 BorderLayout
布局管理器。有关向 JFrame
添加、移除组件以及设置布局管理器的详细信息,请参考 RootPaneContainer
的相关文档。
与 Frame
不同,JFrame
提供了一种机制来响应用户关闭窗口的操作。默认情况下,当用户关闭窗口时,JFrame
的行为是将窗口隐藏。
如果想更改这种默认行为,可以调用 setDefaultCloseOperation(int)
方法。例如,如果希望 JFrame
的行为与 Frame
实例相同,可以使用 setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE)
。
有关内容窗格及根窗格提供的其他功能的详细信息,请参阅《Java 教程》的“使用顶层容器”部分。
在多屏幕环境中,可以在不同的屏幕设备上创建一个 JFrame
。更多信息请参考 Frame
类的相关文档。
注意:Swing 不是线程安全的。有关更多信息,请查看 Swing 的线程策略说明。
注意:此类的序列化对象可能与未来的 Swing 版本不兼容。当前的序列化支持适用于短期存储或在运行相同 Swing 版本的应用程序之间进行 RMI(远程方法调用)。从 Java 1.4 开始,java.beans
包添加了对所有 JavaBeans™ 的长期存储支持。详情请参阅 XMLEncoder
。
JFrame与Frame
JFrame继承了Frame
,很多方法在Frame中定义。
JRootPane
JRootPane
是JFrame的一个字段:
protected JRootPane rootPane;
JRootPane
是 JFrame
的核心组件,负责管理窗口的基本结构,包括内容窗格(contentPane
)、菜单栏、标题栏等:
/** The menu bar. */
protected JMenuBar menuBar;
/** The content pane. */
protected Container contentPane;
/** The layered pane that manages the menu bar and content pane. */
protected JLayeredPane layeredPane;
/**
* The glass pane that overlays the menu bar and content pane,
* so it can intercept mouse movements and such.
*/
protected Component glassPane;
/**
* The button that gets activated when the pane has the focus and
* a UI-specific action like pressing the <b>Enter</b> key occurs.
*/
protected JButton defaultButton;
/**
* Whether or not true double buffering should be used. This is typically
* true, but may be set to false in special situations. For example,
* heavy weight popups (backed by a window) set this to false.
*/
boolean useTrueDoubleBuffering = true;
WindowConstants
JFrame实现了WindowConstants
接口:
public interface WindowConstants
{
public static final int DO_NOTHING_ON_CLOSE = 0;
public static final int HIDE_ON_CLOSE = 1;
public static final int DISPOSE_ON_CLOSE = 2;
public static final int EXIT_ON_CLOSE = 3;
}
这使得可以通过JFrame.xxxx
来访问上面的常量。
常用方法参考
以下是 JFrame
类中常用的方法总结(ChatGPT生成):
1. 窗口操作相关方法
-
setDefaultCloseOperation(int operation)
设置用户关闭窗口时的默认操作。例如:WindowConstants.EXIT_ON_CLOSE
:关闭程序。WindowConstants.HIDE_ON_CLOSE
:隐藏窗口(默认)。WindowConstants.DO_NOTHING_ON_CLOSE
:不执行任何操作。
-
setVisible(boolean b)
显示或隐藏窗口。setVisible(true)
:显示窗口。setVisible(false)
:隐藏窗口。
-
dispose()
释放窗口占用的资源。 -
pack()
根据窗口内组件的大小自动调整窗口大小。
2. 组件管理相关方法
-
add(Component comp)
将组件添加到窗口的 内容窗格(ContentPane)。 -
remove(Component comp)
从窗口的内容窗格中移除指定组件。 -
setLayout(LayoutManager manager)
设置内容窗格的布局管理器。 -
getContentPane()
获取JFrame
的内容窗格。 -
setContentPane(Container contentPane)
设置一个新的内容窗格。
3. 窗口属性设置方法
-
setTitle(String title)
设置窗口的标题。 -
setSize(int width, int height)
设置窗口的宽度和高度。 -
setBounds(int x, int y, int width, int height)
设置窗口的位置和大小。 -
setResizable(boolean resizable)
设置窗口是否可以调整大小。 -
setLocation(int x, int y)
设置窗口的显示位置。 -
setLocationRelativeTo(Component c)
将窗口相对于指定组件居中显示。若传入null
,窗口会居中显示在屏幕上。
4. 菜单栏相关方法
-
setJMenuBar(JMenuBar menuBar)
设置窗口的菜单栏。 -
getJMenuBar()
获取窗口的菜单栏。
5. 其他方法
-
setIconImage(Image image)
设置窗口图标。 -
getRootPane()
获取窗口的根窗格(JRootPane
)。