如何在 Swing 应用程序中停止计时器
How to stop timer in a swing application
我写了一些代码来改变一些按钮的颜色来刺激随机序列闪烁的颜色。我已经为我设置了一个计时器,但我不知道如何停止它
这是我的代码
Timer timer = new Timer(100, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int buttons[] = new int[9];
for (int j = 0; j < buttons.length; j++) {
// System.out.println("times");
Component button = frame.getContentPane().getComponent(j);
int Red = new Random().nextInt(255 - 1) + 1;
int Green = new Random().nextInt(255 - 1) + 1;
int Blue = new Random().nextInt(255 - 1) + 1;
button.setBackground(new Color(Red, Green, Blue));
SwingUtilities.updateComponentTreeUI(button);
}
}// }
}); timer.start();
有几种方法可以做到,这里有一些快速方法。
一种方法是利用 System.currentTimeMillis()
:
private Timer timer;
private final int DELAY = 100;
private final int DURATION = 10_000;
private long startTime;
public void timerExample() {
timer = new Timer(DELAY, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (System.currentTimeMillis() >= startTime + DURATION) {
System.out.println("Done");
timer.stop();
} else {
System.out.println("Tick");
}
}
});
startTime = System.currentTimeMillis();
timer.start();
}
如果当前时间大于 startTime
+ DURATION
,这将停止 Timer
。
另一种方法是使用计数器:
private Timer timer;
private final int DELAY = 100;
private final int DURATION = 10_000;
private final int TOTAL_TICKS = DURATION / DELAY;
private int tickCounter = 0;
public void timerExample() {
timer = new Timer(DELAY, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (++tickCounter == TOTAL_TICKS) {
System.out.println("Done");
timer.stop();
} else {
System.out.println("Tick");
}
}
});
timer.start();
}
将 DELAY
设为 100 毫秒,将 DURATION
设为 10,000 毫秒,您可以计算出所需的计时器 滴答 的总数,例如10,000 / 100 = 100 个刻度。
每次触发动作侦听器时,它都会检查是否达到滴答总数,如果达到则停止计时器。
我写了一些代码来改变一些按钮的颜色来刺激随机序列闪烁的颜色。我已经为我设置了一个计时器,但我不知道如何停止它
这是我的代码
Timer timer = new Timer(100, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int buttons[] = new int[9];
for (int j = 0; j < buttons.length; j++) {
// System.out.println("times");
Component button = frame.getContentPane().getComponent(j);
int Red = new Random().nextInt(255 - 1) + 1;
int Green = new Random().nextInt(255 - 1) + 1;
int Blue = new Random().nextInt(255 - 1) + 1;
button.setBackground(new Color(Red, Green, Blue));
SwingUtilities.updateComponentTreeUI(button);
}
}// }
}); timer.start();
有几种方法可以做到,这里有一些快速方法。
一种方法是利用 System.currentTimeMillis()
:
private Timer timer;
private final int DELAY = 100;
private final int DURATION = 10_000;
private long startTime;
public void timerExample() {
timer = new Timer(DELAY, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (System.currentTimeMillis() >= startTime + DURATION) {
System.out.println("Done");
timer.stop();
} else {
System.out.println("Tick");
}
}
});
startTime = System.currentTimeMillis();
timer.start();
}
如果当前时间大于 startTime
+ DURATION
,这将停止 Timer
。
另一种方法是使用计数器:
private Timer timer;
private final int DELAY = 100;
private final int DURATION = 10_000;
private final int TOTAL_TICKS = DURATION / DELAY;
private int tickCounter = 0;
public void timerExample() {
timer = new Timer(DELAY, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (++tickCounter == TOTAL_TICKS) {
System.out.println("Done");
timer.stop();
} else {
System.out.println("Tick");
}
}
});
timer.start();
}
将 DELAY
设为 100 毫秒,将 DURATION
设为 10,000 毫秒,您可以计算出所需的计时器 滴答 的总数,例如10,000 / 100 = 100 个刻度。
每次触发动作侦听器时,它都会检查是否达到滴答总数,如果达到则停止计时器。