在使用Java绘制面板之前暂停

时间:2013-08-03 00:08:18

标签: java swing jpanel paintcomponent thread-sleep

我试图通过在两个连续的油漆之间添加一个停顿来减慢绘画速度。 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);
        }
    }
}

1 个答案:

答案 0 :(得分:4)

Thread.sleep()方法中移除paint(),不需要它,其次,您Thread.sleep()需要被捕获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吗?