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

Java Swing国际象棋项目棋盘方块未绘制显示问题求助

问题1:paintComponent 方法逻辑错误

  • 绘制坐标错误:Swing 组件的paintComponent方法接收的Graphics上下文坐标是相对于当前组件自身的,你调用getX()、getY()获取的是组件在父容器中的偏移量,会导致绘制内容直接超出当前组件的可视区域,完全看不到绘制的方块。
  • 多余的repaint()调用:在paintComponent内部调用repaint()会触发无限重绘循环,占用大量CPU资源,还会导致绘制异常。
  • 没有调用父类方法:自定义绘制前需要先调用super.paintComponent(g)完成组件基础绘制的清屏等操作,避免出现拖影、背景异常问题。
    修复后的paintComponent代码:
@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    if((this.px + this.py) % 2 == 0) {
        g.setColor(Color.blue);
    } else {
        g.setColor(Color.cyan);
    }
    // 从组件自身左上角(0,0)开始绘制
    g.fillRect(0, 0, this.getWidth(), this.getHeight());
}

问题2:棋盘格子的坐标计算错误

你将Spielfeld(棋盘格子)组件添加到GameEnvironment容器中,子组件的setBounds坐标是相对于父容器(也就是ge)的,不需要额外叠加ge.getX()、ge.getY()(这两个值是ge在父容器contentPane中的偏移量),叠加后会导致所有格子直接偏移出ge的1000x1000可视区域,自然无法显示。
修复后的createMap坐标设置代码:

// 去掉ge.getX()、ge.getY()的叠加
this.map[i][j].setBounds(j * Spielfeld.width, i * Spielfeld.height, Spielfeld.width, Spielfeld.height);

问题3:容器布局未适配绝对定位

如果你使用setBounds手动设置组件位置,需要确保父容器使用null绝对布局,否则默认的布局管理器会自动覆盖你设置的位置和尺寸,导致格子不显示。
需要在SchachFrame构造方法中添加对应布局设置:

public SchachFrame() {
    super();
    contentPane = new JPanel();
    contentPane.setLayout(null); // 新增:contentPane用绝对布局
    setContentPane(contentPane);
    setBounds(0, 0, window.width, window.height);
    contentPane.setBackground(Color.darkGray);
    
    ge = new GameEnvironment(this);
    ge.setLayout(null); // 新增:GameEnvironment用绝对布局,才能让格子的setBounds生效
    ge.setBounds(window.width/2 - 500, window.height/2 - 500, 1000, 1000);
    contentPane.add(ge);
    
    // 调用createMap生成棋盘后,新增以下代码刷新容器
    ge.revalidate();
    ge.repaint();
    
    Thread gameEnvironment = new Thread(ge);
    gameEnvironment.start();
    
    setResizable(false);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:27:05