如果您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);
});
}
}