2014-02-07 26 views
3

我在java中创建了这段代码,我想在代码的这一部分之后做出延迟,但是当我使用延迟或者休眠代码时,整个代码会延迟时间但是我想要看到gui的背景变化,然后延迟!!!所以我应该怎么做(我使用Swing GUI)在java的gui中做了一个特殊的延迟

for (int i = 0; i < 8; i++) { 
    for (int j = 0; j < 8; j++) { 
     if (matrisBazi[i][j] == 0) { 
      jb[i][j].setBackground(Color.white); 
     } 
     if (matrisBazi[i][j] == 1) { 
      jb[i][j].setBackground(Color.red); 
     } 
     if (matrisBazi[i][j] == 2) { 
      jb[i][j].setBackground(Color.blue); 
     } 
    } 
} 
jb[i][j].addActionListener(new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent event) { 
    click(s); 
    } 
}); 

我的actionPerformed无效之前被调用和点击里面()?;函数,并正在做这个过程,所以如何添加摆动计时器代码到这个空隙? 我认为定时器不工作,直到点击();完了。

+0

[tag:swing] tag added。这是告诉人们你正在使用的GUI库的最佳方式。 –

回答

4

如果这是一个Swing GUI(你不告诉我们),你不会想要使用Thread.sleep(...),因为它会睡眠Swing事件线程并让整个应用程序进入睡眠状态。相反,你会想要使用Swing Timer。

请注意,如果您要缓慢增加变量,则不会使用for循环,而是会直接在定时器的actionPerformed方法内增加变量。

例如这样的:

for (int i = 0; i < MAX; i++) { 
    // do some animation using i 
    Thread.sleep(sleepTime); 
} 

将被更改为:

new Timer(sleepTime, new ActionListener(){ 
    private int i = 0; 

    public void actionPerformed(ActionEvent evt) { 
    if (i >= MAX) { 
     // stop the animation 
    } 
    // do some animation with i 
    i++; 
    } 
}).start(); 
+0

是 那么,我该如何使用摆动计时器 –

+0

@ user3125076:你会想要阅读教程,因为它都拼写在那里。谷歌会帮你找到信息。如果您在尝试完代码后遇到有关代码的特定问题,请回过头再用代码提出一个新问题。 –

+0

@ user3125076:请参阅上面的简短示例。另外,如果你想避免线程错误,请不要使用带有Swing动画的'java.util.Timer',而忽略Alvin的好意,但误导了你的答案。 –

4

你需要,因为你有一个GUI中使用Swing计时器(javax.swing.Timer中)。
阅读本教程: How to use Swing timers

+0

啊,@HovercraftFullOfEels是对的。抱歉。在Swing定时器上阅读此Java链接。 Swing GUI完全不同:http://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html –

+0

完成@HovercraftFullOfEels。 –