开发者

Can't use repaint()?

//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((in开发者_如何学Pythont)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();
    }
}


You should try using repaint() instead of this.paint(gra), and put it inside the thread, you also need to add the component to you graphic interface


You need to override the paintComponent() method of the JComponent class. Have it do your painting and add that component to your GUI.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜