简体   繁体   中英

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((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();
    }
}

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM