![](/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.