重新循环

Ete*_*oob 2 java swing repaint

我正在使用Java Swing编写游戏.我希望每次循环执行时都会绘制一个小延迟,以在屏幕上创建级联效果.我相信系统中的效率例程会将调用折叠repaint()成单个调用.无论如何,在总延迟之后,所有变化都会立即发生.有没有办法强制系统立即重绘,然后延迟循环的每次迭代?

我的代码:

for(int i=0;i<10;i++){
    JButton[i].setBackground(Color.WHITE);
    JButton[i].repaint();
    Thread.sleep(2000);
    JButton[i].setBackground(Color.GRAY);
    JButton[i].repaint();
}
Run Code Online (Sandbox Code Playgroud)

Cam*_*ner 6

您可以使用JComponent.paintImmediately强制立即重绘.

编辑:再次阅读您的问题后,我发现您可能正在事件派发线程上执行您的逻辑.这意味着重复请求将在您的方法返回之后才会执行.如果你把你的代码放到另一个线程,那么这可能会解决问题,它将比使用更好paintImmediately.

void uiFunction() {
    new Thread() {
        public void run() {
            for(int i = 0; i < 10; i++) {
                final JButton b = buttons[i];
                SwingUtilities.invokeLater(new Runnable() {
                    b.setBackground(Color.WHITE);
                    b.repaint();
                }
                Thread.sleep(2000);
                SwingUtilities.invokeLater(new Runnable() {
                    b.setBackground(Color.GRAY);
                    b.repaint();
                }
            }
        }
    }.run();
}
Run Code Online (Sandbox Code Playgroud)

它有点肮脏,但希望它能让你知道从哪里开始.