2014-02-07 55 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。 –