Java如何制作居中的JFrame?

如果您JFrame在Java Swing应用程序中有一个,并且想要在屏幕上居中定位,则可以使用以下示例。

第一种方法是利用java.awt.Toolkit类来获取屏幕尺寸。该getScreenSize()方法java.awt.Dimension从我们可以获得屏幕的width和height的位置返回a 。掌握了这些值之后,我们就可以计算出代码的左上角位置,JFrame如下面代码的第2步所示。

package org.nhooo.example.swing;

import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import java.awt.Dimension;
import java.awt.Toolkit;

public class CenteredJFrame extends JFrame {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            // 获取屏幕尺寸
            Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

            CenteredJFrame frame = new CenteredJFrame();
            frame.setTitle("Centered JFrame");
            frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
            frame.setSize(250, 250);

            // 计算CenteredJFrame的位置
            // 应该在屏幕上调整速度。
            int x = (screenSize.width - frame.getWidth()) / 2;
            int y = (screenSize.height - frame.getHeight()) / 2;
            frame.setLocation(x, y);
            frame.setVisible(true);
        });
    }
}

更好,更简单的第二个示例是使用该setLocationRelativeTo(Component)方法。根据此方法的Javadoc:如果组件为null,或GraphicsConfiguration与此组件相关联的为null,则窗口将放置在屏幕的中央。

如果调用该JFrame.pack()方法。该方法应在setLocationRelativeTo()方法之前调用。

所以我们可以像这样重写上面的代码:

package org.nhooo.example.swing;

import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;

public class CenteredJFrameSecond {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            CenteredJFrame frame = new CenteredJFrame();
            frame.setTitle("Centered JFrame");
            frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
            frame.setSize(250, 250);

            // 将窗口放在屏幕中央。
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        });
    }
}