gpt4 book ai didi

java - 需要帮助将计时器方法放在 JToggleButton 后面

转载 作者:行者123 更新时间:2023-12-01 15:16:27 27 4
gpt4 key购买 nike

我对此有点挣扎。在对 Google 进行研究后,我创建了以下计时器例程,该例程在调用时效果良好

// 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 中,这是它的正确位置,这样当我单击“播放”时,它会播放一个 Action ,当我单击“停止”时,它会停止(或暂停)例行公事。这是我的 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 还很陌生,如果有人能提供帮助,那就太好了

最佳答案

您可以利用 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()

关于java - 需要帮助将计时器方法放在 JToggleButton 后面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11531210/

27 4 0