0

我试图通过在两个连续的绘画之间添加暂停来减慢绘画的速度。Thread.sleep()显然不起作用。这是代码:

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

1 回答 1

4

去掉Thread.sleep()insidepaint()方法,不需要,二是Thread.sleep()需要被 catch InterruptedException,编译时可能会报错:

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

你看过Swing Timer吗?

于 2013-08-03T00:18:39.837 回答