qed
qed

Reputation: 23104

Pause before painting the panel in Java

I am trying to slow down the painting by adding a pause between two consecutive paints. Thread.sleep() apparently doesn't work. Here is the code:

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

public class Sa {
    int x = 70;
    int y = 70;

    public static void main(String[] args) {
        Sa gui = new Sa();
        gui.go();
    }

    public void go() {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        MyDrawPanel drawPanel = new MyDrawPanel();
        frame.getContentPane().add(drawPanel);

        frame.setSize(300, 300);
        frame.setVisible(true);

        for(int i=0; i<130; i++) {
            x++;
            y++;
            drawPanel.repaint();
            try {
                Thread.sleep(1500);
            } catch(Exception ex) {}
        }

    }

    class MyDrawPanel extends JPanel {
        public void paintComponent(Graphics g) {
            g.setColor(Color.white);
            g.fillRect(0, 0, this.getWidth(), this.getHeight());
            Thread.sleep(1500); // will not work!!
            g.setColor(Color.green);
            g.fillOval(x, y, 80, 40);
        }
    }
}

Upvotes: 0

Views: 1113

Answers (1)

Azad
Azad

Reputation: 5055

Remove Thread.sleep() inside paint() method, not need it, and second, you Thread.sleep() needs to be caught InterruptedException, it may give an error while compiling:

  g.setColor(Color.white);
    g.fillRect(0, 0, this.getWidth(), this.getHeight());
    //Thread.sleep(1500); // will not work!! (DONT NEED this
    g.setColor(Color.green);
    g.fillOval(x, y, 80, 40);

Have you looked at Swing Timer ?

Upvotes: 4

Related Questions