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

JPanel子类TwoButtons及SimpleAnimation无法显示图形的问题求助

嘿,我明白你折腾两天的烦躁啦!其实问题出在两个很容易忽略的小细节上,咱们马上搞定它~

第一个核心问题:绘制方法名拼写错误

你在MyDrawPanel类里写的是paintConponent,但正确的方法名应该是paintComponent——注意中间的Component是有两个m的!

这个方法是Swing组件用来完成绘制的核心方法,拼写错了之后,JVM根本不会调用你的绘制逻辑,所以窗口里自然看不到圆形啦。不管是TwoButtons里的MyDrawPanel还是SimpleAnimation里的,都犯了这个拼写错误。

第二个问题:SimpleAnimation的重绘刷新问题

除了方法名拼写,SimpleAnimation里的MyDrawPanel还有个小问题:你没有在paintComponent里调用父类的super.paintComponent(g)。这会导致每次重绘的时候,面板不会清除之前画的圆形,结果就是圆形移动的时候会留下一串“尾巴”。

修正后的代码

修正后的TwoButtons里的MyDrawPanel:

import javax.swing.JPanel;
import java.awt.*;

public class MyDrawPanel extends JPanel {
    public void paintComponent(Graphics g) { // 修正方法名拼写
        Graphics2D g2d = (Graphics2D) g;
        int red = (int) (Math.random() * 255);
        int green = (int) (Math.random() * 255);
        int blue = (int) (Math.random() * 255);
        Color startColor = new Color(red, green, blue);
        red = (int) (Math.random() * 255);
        green = (int) (Math.random() * 255);
        blue = (int) (Math.random() * 255);
        Color endColor = new Color(red, green, blue);
        GradientPaint gradient = new GradientPaint(70, 70, startColor, 150, 150, endColor);
        g2d.setPaint(gradient);
        g2d.fillOval(70, 70, 100, 100);
    }
}

修正后的SimpleAnimation里的MyDrawPanel:

class MyDrawPanel extends JPanel{
    public void paintComponent(Graphics g) { // 修正方法名拼写
        super.paintComponent(g); // 新增:调用父类方法刷新背景
        g.setColor(Color.green);
        g.fillOval(x, y, 40, 40);
    }
}

补充说明

  • 对于Swing的自定义绘制,必须严格拼写paintComponent,这是Java的约定,拼写错误就不会触发绘制逻辑。
  • 调用super.paintComponent(g)是个好习惯,它会帮你处理面板的背景刷新、边框绘制等默认操作,避免出现绘制残留的问题。

现在把修正后的代码替换进去,运行试试,应该就能看到正常的圆形和动画啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:03:18