javax.swing.JFrame介绍

JFrame

简介

译自https://docs.oracle.com/javase/8/docs/api/

这是 Java 中 java.awt.Frame 的扩展版本,增加了对 JFC/Swing 组件架构的支持。关于如何使用 JFrame 的任务导向文档,可以在《Java 教程》的“如何创建窗口”部分找到。

JFrame 类与 Frame 类有一些不兼容之处。与所有其他 JFC/Swing 顶层容器一样,JFrameJRootPane 作为其唯一的子组件。由根窗格提供的内容窗格(Content Pane)通常应包含 JFrame 所显示的所有非菜单组件。这与 AWT 中的 Frame 有所不同。

为了方便开发,JFrame 类重写了 addremovesetLayout 方法,使它们能够将调用委托给内容窗格的对应方法。例如,您可以通过以下方式将子组件添加到一个框架中:

      frame.add(child);

子组件将被添加到内容窗格(ContentPane)中。内容窗格始终不为空,若尝试将其设置为 nullJFrame 会抛出异常。默认的内容窗格使用 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;

JRootPaneJFrame 的核心组件,负责管理窗口的基本结构,包括内容窗格(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)。

posted @ 2024-12-17 09:54  xkfx  阅读(45)  评论(0编辑  收藏  举报