【发布时间】:2018-11-11 21:59:46
【问题描述】:
我在 java 中编写了一个倒数计时器。它从用户在组合框中选择的任何数字开始倒计时,其中有 3 个(小时、分钟、秒)。这部分工作得很好。
当我按下“重置”按钮时,问题就出现了。它清除了我用来显示剩余时间的标签,并使它们显示为“00”。但是当我再次按下开始时,它会以剩余秒数的形式回忆上次的位置并从那里开始。
请帮忙!!
这是我的计时器代码:
private void JButtonActionPerformed(java.awt.event.ActionEvent evt) {
timer = new Timer(1000, new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
onoff = true;
if(hours == 1 && min == 0 && sec ==0){
repaint();
hours--;
lblHours.setText("00");
min=59;
sec=60;
}
if(sec == 0 && min <= 59 && min>0){
sec=60;
min--;
lblHours.setText("00");
}
if(sec == 0 && hours == 0 && min<=0){
repaint();
JOptionPane.showMessageDialog(rootPane, "You have run out of time and did not manage to escape!", "Time is up!!", 0 );
hours = 0; min = 0; sec = 0;
timer.stop();
}
else{
sec--;
repaint();
if (sec<10){
lblSeconds.setText("0"+sec);
repaint();
flag = false;
}
if (hours==0){
repaint();
lblHours.setText("00");
if (min<10)
repaint();
lblMinutes.setText("0"+min);
if (sec<10)
lblSeconds.setText("0"+sec);
else
lblSeconds.setText(""+sec);
}
if(flag){
lblHours.setText(""+hours);
lblMinutes.setText(""+min);
lblSeconds.setText(""+sec);
repaint();
}
}
}
});
timer.start();
}
我的重置按钮代码在这里:
onoff =false;
timer.stop();
repaint();
lblHours.setText("00");
lblMinutes.setText("00");
lblSeconds.setText("00");
repaint();
我知道我对 repaint(); 有点疯狂但我不知道我应该多久使用一次哈哈。
任何帮助/指导将不胜感激。
【问题讨论】:
-
你没有重置
hours,min,second -
你在哪里重置
hours、min和sec? -
我只想指出,这是一种幼稚的方法。 Swing
Timer(甚至Thread.sleep)只保证“至少”持续时间。好的,所以它不是超高分辨率计时器,但您仍然需要了解这会导致“漂移”发生,尤其是在很长一段时间内。 “更好”的解决方案是计算自计时器启动以来经过的时间。幸运的是,Java 现在对此提供了很多支持 - for example