repaint重绘不消除之前图像问题

好久没写过Java界面的程序,一写就搞不定:
如下,就是一个小球在在几面里来回移动的问题

public class ReboundPanel extends JPanel {
    private final int WIDTH = 300, HEIGHT = 100;
    private final int DELAY = 20;
    private Timer timer;
    private int x,y ,moveX,moveY;

    public ReboundPanel() {
        timer  = new Timer(DELAY,new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                x += moveX;
                y += moveY;
                if(x<=0 ||x >= WIDTH - 30) {
                    moveX = moveX * -1;
                }
                if(y<=0 ||y >= HEIGHT - 30) {
                    moveY = moveY * -1;
                }
                repaint();
            }
        });

        x = 0;
        y = 40;
        moveX = moveY = 3;

        setPreferredSize(new Dimension(WIDTH, HEIGHT));
        setBackground(Color.black);
        timer.start();
    }

    @Override
    public void paint(Graphics g) {
        Color c = g.getColor();
        g.setColor(Color.RED);
        g.fillOval(x, y, 30, 30);
        g.setColor(c);
    }
}

结果却是这样:
这里写图片描述
对,之前的图像没有消除,查了资料,在继承了JPanel类后使用paint()方法应该调用一下父类的paint()方法,继承JFrame类的类使用paint()方法测试不调用父类方法并不会出现这样的情况:

    public void paint(Graphics g) {
        super.paint(g);//调用父类方法
        Color c = g.getColor();
        g.setColor(Color.RED);
        g.fillOval(x, y, 30, 30);
        g.setColor(c);
    }

结果:
这里写图片描述

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
回答:根据你提供的引用内容,你遇到的问题是在浏览器中使用Javarepaint()方法时,屏幕没有更新。repaint()方法是用于请求组件重新绘制自己的方法。然而,根据你的描述,你在浏览器中运行游戏时只看到一个白色屏幕,这可能是由于浏览器对Java Applet的支持不完全导致的。在浏览器中,Java Applet的绘制可能受到限制,因此repaint()方法可能无法正常工作。你可以尝试以下几个解决方法: 1. 确保你的浏览器已经启用了Java插件,并且使用的是最新版本的Java插件。 2. 检查你的代码是否有任何与浏览器兼容性相关的问题。例如,你可能需要使用适当的布局管理器来确保组件正确绘制。 3. 尝试使用其他浏览器来运行你的游戏,看看是否有任何改善。 4. 如果可能的话,考虑使用其他技术来实现你的游戏,例如HTML5和JavaScript,这些技术在浏览器中的兼容性更好。 希望这些解决方法能帮助你解决问题。如果问题仍然存在,请提供更多的细节,以便我能够更好地帮助你。 #### 引用[.reference_title] - *1* *2* [Java repaint()在浏览器中不起作用](https://blog.csdn.net/weixin_39614546/article/details/114782958)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值