2013-05-09 58 views
1

我正在嘗試更改按鈕背景顏色爲10次時事件發生?當事件發生時重繪功能不起作用


private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {           
    try { 
     for (int i = 0; i < 10; ++i) { 
      Random r = new Random(); 
      jButton2.setBackground(new Color(r.nextInt(150), r.nextInt(150), r.nextInt(150))); 
      jButton2.repaint(); 
      Thread.sleep(200); 
     } 
    } catch (Exception e) { 
     System.out.println(e.toString()); 
    } 

} 

按鈕顯示最後的顏色?


由於它的正常工作

int x = 0; 
Timer timer; 
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {           

    timer = new Timer(1000, new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      Random r = new Random(); 
      jButton2.setBackground(new Color(r.nextInt(150), r.nextInt(150), r.nextInt(150))); 
      jButton2.repaint(); 
      if(x==10){ 
       timer.stop(); 
       x=0; 
      } else{ 
       x++; 
      } 
     } 
    }); 
    timer.start(); 
} 
+0

很高興你有它的工作。考慮在你的課程開始時只創建一次Random對象。沒有必要重新創建它。 – 2013-05-10 02:13:39

回答

3

不要Swing事件線程調用了Thread.sleep(...),因爲這使整個Swing GUI的睡覺。換句話說,你的GUI不執行繪製操作,接受沒有用戶輸入或交互在所有並變爲完全無用,而事件(也被稱爲ëd ispatch Ť hread或EDT)。改用Swing Timer。請查看Swing Timer Tutorial獲取更多幫助。

另外看看this question的一些答案,包括mKo​​rbel的答案。

相關問題