//I want to paint a ball in a animation
//I can't seem to find a way to repaint the ball
// Any help or tips on how to use repaint here?
//

      // Ball class
     import javax.swing.*;
        import java.awt.*;
        import java.awt.event.*;
        import java.util.*;
        public class Ball implements Runnable {
        protected Point loc;
        protected int dx;
        protected int dy;
        protected Color color;
        protected boolean flag;
        private Graphics gra;
        public Ball(Point loc,int dx,int dy,Graphics st)
        {
            this.loc=loc;
            this.dx=1;
            this.dy=1;
            color=Color.blue;
            this.gra=st;
            flag=false;
        }
        public void paint(Graphics g)
        {
            g.fillOval((int)this.loc.getX(),(int)this.loc.getY(),20,20);
        }
        public void move()
        {
            this.loc.translate(this.dx,this.dy);
        }

        @Override
        public void run() {
            while(flag==false)
            {
                this.paint(gra);
                try {
                    Thread.sleep(20);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                move();
            }
        }

        }


//Myframe class
import javax.swing.JFrame;
import java.awt.*;
import java.awt.event.*;
public class myframe extends JFrame {
    private Ball b;
    public myframe()
    {
        super("My Frame");
        setSize(800,600);
    }
    public void run()
    {
        b=new Ball(new Point(100,100),10,10,getGraphics());
        b.run();
    }
}

//Main class
import javax.swing.JFrame;
import java.awt.*;
import java.awt.event.*;
public class Main extends JFrame
{

    /**
     * @param args
     */
    public static void main(String[] args) {
        myframe jwin = new myframe();
        jwin.setSize(600, 600);
        jwin.setVisible(true);
        jwin.run();
    }
}

最佳答案

您应该尝试使用repaint()而不是this.paint(gra),并将其放在线程中,还需要将组件添加到图形界面

10-08 19:48