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

Java使用JFrame创建窗口时Canvas底部与右侧区域无法渲染问题

问题根因

你给JFrame设置的800600是窗口的总大小,包含了系统自带的标题栏、窗口边框的尺寸,窗口内部可放置组件的内容区实际尺寸小于800600,所以作为子组件的Canvas被挤压,绘制区域小于预期,底部和右侧内容就被裁剪了。

修复步骤

  • 不要给JFrame设置固定大小,改为给你要绘制的Main(继承自Canvas)实例设置预期的首选尺寸
  • 删掉JFrame的setPreferredSize/setMinimumSize/setMaximumSize配置,pack()方法会自动根据内部组件的尺寸计算窗口的总大小,刚好让Canvas的绘制区域等于你要的800*600
  • Window类不需要继承Canvas,属于无用继承可直接去掉

修改后的关键代码

// 去掉无用的Canvas继承
class Window {
    public Window(int w, int h, String t, Main game) {
        JFrame frame = new JFrame(t);
        // 给Canvas设置预期绘制尺寸,而不是给JFrame设固定大小
        game.setPreferredSize(new Dimension(w, h));
        frame.setResizable(false);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(game);
        frame.setLocationRelativeTo(null);
        // pack自动计算窗口总大小,适配内部Canvas尺寸
        frame.pack();
        frame.setVisible(true);
        game.start();
    }
}

修改后你原有测试代码里的绿色横线就会正常出现在距离底部38像素的位置,不会紧贴窗口底部,也不需要再手动调整所有元素的尺寸和位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:54:04