2015-02-09 47 views
1

我在做點擊遊戲程序。用戶必須鍵入時間限制(以秒爲單位)。如果該值爲正,則點擊按鈕將被啓用。當時間用完時,點擊按鈕將被禁用。這是我當前的代碼部分: 我似乎無法使用)從的setInterval(返回的值,禁用我點擊按鈕計時器命中0如何在定時器倒計時後禁用JButton爲0

public void actionPerformed(ActionEvent a) { 
    if (a.getSource()==startButton){ 
      try{ 
        String sec = timeField.getText(); 
        int delay = 1000; 
        int period = 1000; 
        timer = new Timer(); 
        interval = Integer.parseInt(sec); 

        if(interval > 0){ 
         timeLeft.setText("Time left: " + sec); 
          timeLeft.setText("Start!"); 
          clickButton.setEnabled(false); 



         if(setInterval() > 0){ 
          timer.scheduleAtFixedRate(new TimerTask() { 
           public void run() { 
             timeLeft.setText("Time left: " + String.valueOf(setInterval())); 
            } 
           }, delay, period); 

          clickButton.setEnabled(true); 
         }else{ 
          System.out.print(String.valueOf(setInterval())); 
          clickButton.setEnabled(false); 
          } 

        } else { 
         JOptionPane.showMessageDialog(null, "Error! Please enter postivie Interger! ", "Error", JOptionPane.ERROR_MESSAGE); 
        } 
      } 
      catch(NumberFormatException e){ 
       JOptionPane.showMessageDialog(null, "Error! Please enter Integer! ", "Error", JOptionPane.ERROR_MESSAGE); 
      } 
    } 
    else if(a.getSource()==clickButton) 
    { 
     clickCOunter++; 
     clickLabel.setText("Clicks: " + clickCOunter); 
    } 
} 

private static final int setInterval() { 
     if (interval == 1) 
      timer.cancel(); 
     return --interval; 
    } 
+0

此行是否按預期重複執行? timeLeft.setText(「Time left:」+ String.valueOf(setInterval())); – 2015-02-09 08:04:50

+0

是的,它作爲一個計時器倒計時 – Hunter6310 2015-02-09 08:10:24

回答

1

在你的情況後,現在,我會放置一個的System.out.println(setInterval的());正好在if(setInterval() > 0) {檢查之上。這樣你可以觀察到價值如何變化更好。

作爲一般提示,您不必使用String.valueOf(...)來打印數字。刪除它還會使您的代碼更易於閱讀。 此外,請確保排列大括號({})。這也將使您的代碼更易於閱讀和調試。最後,如果我可以提出一個建議,可以稍微簡單一些,以解決您的問題。如果您使用擺動計時器,則可以在actionPerformed()方法之外創建它,並將其設置爲定期撥打actionPerformed()。這樣actionPerformed()內部的邏輯可以被簡化很多。 請看看Swing計時器的文檔。 Swing Timer docs