You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 07:36:04