为什么我设置的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
相关产品推荐
相关产品推荐

