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

为什么我设置的JFrame窗口尺寸和实际显示的数值不匹配?

问题原因

  • JFrame的setSize()方法设置的是包含窗口标题栏、系统边框的整体窗口尺寸,操作系统的窗口装饰会占用数十像素的空间,因此实际容纳内容的面板区域尺寸会远小于你设置的640x640,导致20个32px的方块无法完整放满对齐。
  • 代码执行顺序错误:你在窗口已经通过setVisible(true)显示之后才添加gameScreen组件,没有触发布局重计算,也会导致组件尺寸、位置显示异常。

修复方案

调整代码逻辑,优先给内容面板设置固定尺寸,再调用pack()方法让JFrame自动计算适配的整体窗口大小,最后再显示窗口,修改后的代码如下:

package main;

import javax.swing.JFrame;
import java.awt.Dimension;

public class Game extends JFrame {
    
    private GameScreen gameScreen;
    
    public Game() {
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        gameScreen = new GameScreen();
        // 给内容组件设置固定的首选大小
        gameScreen.setPreferredSize(new Dimension(640, 640));
        add(gameScreen);
        // 自动计算窗口总大小,刚好容纳内容组件
        pack();
        setLocationRelativeTo(null);
        // 最后再显示窗口
        setVisible(true);
    }

    public static void main(String[] args) {
        Game game = new Game();
    }

}

内容的提问来源于stack exchange,提问作者GraysonA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 02:06:05