![](/img/trans.png)
[英]How to add two ActionListener on the same button to perform Timer.start() / Timer.stop() method
[英]Start-Stop timer via same Button
我尝试通过相同的Jbutton启动/停止计时器。 让我分享我的代码;
按钮动作;
private void ButtonActionPerformed(java.awt.event.ActionEvent evt) {
if(Button.getText().equals("START")){
Button.setText("STOP");
Spinner.setEnabled(false);
Informer.setBackground(Color.green);
Informer.setText("Running");
Timer time = new Timer();
ScheduledTask st = new ScheduledTask();
time.schedule(st, 0, (int) Spinner.getValue()*1000*60);
}
else{
Button.setText("START");
Spinner.setEnabled(true);
Informer.setBackground(Color.red);
Informer.setText("Stopped");
}
}
当用户按下按钮时; 按钮名称从“开始”的“停止”更改为“通知者”文本字段的涂色为绿色,并在“正在运行”中写入内容,然后在计时器下方启动
public class ScheduledTask extends TimerTask {
public void run() {
if (Button.getText().equals("STOP")){
Worker1 worker1 = new Worker1();
worker1.execute();
}
else{
ScheduledTask.this.cancel();
}
}
}
如您所见,计时器执行名为worker1的SwingWorker。 如果我再次按下按钮(命名为STOP),则将jbutton重命名为START,而计时器在按钮文本中看不到STOP,而是停止本身。
想象一下将计时器设置为1分钟,然后按开始按钮。 当按下开始按钮时,worker1立即执行,并且计时器开始倒计时。 在20-30秒内,按STOP按钮,然后等待5-10秒。 再次按开始按钮。 问题是这里2个计时器现在已经在运行。 第一次倒计时完成时,worker1将执行。 5到10秒后,计时器fininsh继续倒数计时,然后再次启动worker1。
如果已经激活任何倒计时,如何在按下同一按钮时停止当前计时器的倒计时?
您可以在同一位置使用两个不同的按钮。 首先,当按下开始按钮时,计时器将启动,按钮将被隐藏,停止按钮将出现,反之亦然。
问题完全不在JButtons中。
问题是您没有正确取消工作程序任务。 这里:
if (Button.getText().equals("STOP")){
Worker1 worker1 = new Worker1();
worker1.execute();
}
else{
ScheduledTask.this.cancel();
}
您不能保证定时器完成后按钮上的文字将为“ STOP”。
按下停止按钮时,您需要停止计时器本身,以防止首先启动计划的任务。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.