如何让Java Swing JFrame程序运行时自动在屏幕居中显示
问题根因
你当前代码的错误是将窗口居中的坐标偏移量错误传入了setPreferredSize()方法,该方法的作用是定义窗口自身的宽高,而非设置窗口在屏幕上的显示位置。
解决方法
有两种常用实现方案,更推荐第二种简洁写法:
- 方案1:手动计算坐标,在
pack()方法调用后(此时窗口实际尺寸已确定),计算屏幕与窗口的尺寸差设置位置 - 方案2:使用Swing自带API,直接调用
setLocationRelativeTo(null),传入null参数时窗口会自动居中到主屏幕,无需手动计算尺寸。
修改后完整代码
package Main; import java.awt.Dimension; import java.awt.Toolkit; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.WindowConstants; public class GUI extends JFrame{ protected static final ImageIcon ICON = new ImageIcon("Image.png"); public static void main(String[] args){ new GUI(); } public GUI(){ Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); // 正确设置窗口自身尺寸为屏幕的1/2大小 setPreferredSize(new Dimension(dim.width/2, dim.height/2)); setTitle("GUI"); setIconImage(ICON.getImage()); pack(); // 窗口居中核心代码 setLocationRelativeTo(null); setVisible(true); } }
关键修改说明
- 修正
setPreferredSize参数为窗口自身的宽高值,你原本的需求应该是窗口大小为屏幕的一半,所以直接传dim.width/2和dim.height/2即可 - 在
pack()之后调用setLocationRelativeTo(null),确保窗口尺寸确定后再计算居中位置,避免出现偏移
内容的提问来源于stack exchange,提问作者Middl Wizrd
相关产品推荐
相关产品推荐

