Java如何制作居中的JFrame?
如果您JFrame在JavaSwing应用程序中有一个,并且想要在屏幕上居中定位,则可以使用以下示例。
第一种方法是利用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); }); } }