2012-07-17 51 views
0

我正在爲此苦苦掙扎。在谷歌研究後,我創建了以下定時程序叫做需要幫助把一個計時器方法放在JToggleButton後面

// play move method 
public static void playMove() { 
    int delay = 1200; // delay for 1 sec. 
    int period = 1200; // repeat every sec. 

    final Timer timer = new Timer(); 
    timer.schedule(new TimerTask() { 
     private int count = history.getGameIndex(); 

     public void run() { 
      count++; 
      if (count >= history.getTotalMoves() + 1) { 
       timer.cancel(); 
       timer.purge(); 
       return; 
      } 
      history.next(); 
     } 
    }, delay, period); 
} 

然而,當它工作得很好,問題是,我不明白如何將這個代碼集成到JToggleButton中這是正確的地方,它使當我點擊播放時,播放動作,當我點擊停止時,停止(或暫停)例程。這裏是我的JToggleButton中的代碼:

ImageIcon playIcon = new ImageIcon(
     JBoard.class.getResource("/images/menu/play.png")); 

btnPlayMove = new JToggleButton(playIcon); 
btnPlayMove.setToolTipText("Play"); 
btnPlayMove.setContentAreaFilled(true); 
btnPlayMove.setMargin(new Insets(2, 2, 2, 2)); 

btnPlayMove.addItemListener(new ItemListener() { 
    public void itemStateChanged(ItemEvent ie) { 
     if (isConnected()) { 
      showMessage("Engine disabled during network play..."); 
      return; 
     } else if (btnPlayMove.isSelected()) { 
      // play 
      playMove(); 
      ImageIcon playIcon = new ImageIcon(JBoard.class 
        .getResource("/images/menu/play.png")); 
      btnPlayMove.setIcon(playIcon); 
     } else { 
      // stop 
      ImageIcon stop = new ImageIcon(JBoard.class 
        .getResource("/images/menu/stop.png")); 
      btnPlayMove.setIcon(stop); 

     } 
    } 
}); 
buttonPanel.add(btnPlayMove); 

我是相當新的Java和這將是巨大的,如果有人可以幫助

回答

1

你可以利用javax.swing.Timer中

Timer timer = new Timer(1200, new ActionListener() { 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     count++; 
     if (count >= history.getTotalMoves() + 1) { 
      timer.cancel(); 
      timer.purge(); 
      return; 
     } 
     history.next(); 
    } 
}); 

timer.setRepeats(true); 
timer.setCoalesce(true); 
timer.setInitialDelay(1200); 

。然後在你按鈕的代碼,你會簡單地調用timer.start()timer.stop()

+0

MadProgrammer:感謝您的代碼。我明白你的意思,但是,我無法讓你的代碼正常工作。我將它放在我的課堂上,但Eclipse一直告訴我刪除參數以匹配'Timer()'?我到底在哪裏把代碼和我的方法聯繫起來? – user1432365 2012-07-18 16:21:52

+0

請確保您使用的是javax.swing.Timer而不是java.util.Timer – MadProgrammer 2012-07-18 19:56:09

+0

是的,我正在使用java.util.Timer ... doh!現在工作:-)。再次感謝你。 – user1432365 2012-07-19 18:47:40

0

我會建議你做的playMovie方法非靜態&聲明以史爲全局變量&包括在你揮杆類:

History history = new History(); // assuming this with no-args 

public void playMove() { 
     int delay = 1200; // delay for 1 sec. 
     // etc. 
     // etc. 
} 

此外,您將需要以編程方式停止playMove()如果TimerTask的線程仍在運行。