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

Java Swing使用paintComponent绘制Mühle游戏棋子不显示问题求解

问题原因与修复方案

核心问题:绘制坐标逻辑错误

Swing 组件的 paintComponent 方法中传入的 Graphics 上下文,坐标是相对于当前组件自身左上角的,而非相对于顶层窗口的全局坐标。你当前在 fillOval 方法中直接使用了存储全局位置的 this.x 和 this.y,相当于在大小仅 30x30 的棋子组件内部,从远超出组件范围的位置开始绘制圆形,自然不会有任何可见内容。
此外你在 paintComponent 中调用了 repaint(),会触发无限重绘,占用大量 CPU 资源,需要删除。

修复代码

修改 Steine 类的 paintComponent 方法即可:

protected void paintComponent(Graphics g){
    super.paintComponent(g);
    Graphics2D g2d = (Graphics2D) g;
    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    g.setColor(this.farbe);
    // 改为组件内部相对坐标,从(0,0)开始绘制30x30的圆刚好铺满组件
    g.fillOval(0, 0, 30, 30);
}

额外优化建议

  • 你自定义的 Steine 类的 x、y 属性覆盖了父类 JComponent 自带的同名字段,容易导致逻辑混淆,后续可以考虑删除自定义的这两个属性,直接调用父类的 getX()、getY()、setLocation() 方法操作组件位置即可。
  • 白色棋子在青色背景上对比度较低,后续可以给白色棋子增加深色边框,或者调整背景色提升识别度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:27:03