让Swing Timer对象每2秒触发10次并在每次触发时做一个不同的事情可以做些什么?使用:
// task one
int delay = 2000;
Timer swingTimer = new Timer(delay, new ActionListener() {
public void actionPerformed(ActionEvent e) {
// task two
}
});
swingTimer.start();
只能让我做两件事。但是我想用定时器执行一段代码,等待2秒,执行另一块代码,等待另外2秒,做另一件事等等等等等10个连续任务。感谢。
答案 0 :(得分:2)
在actionPerformed
方法中使用某种计数器来确定您最常使用的循环....
private int cycle = 0;
//...
Timer swingTimer = new Timer(delay, new ActionListener() {
public void actionPerformed(ActionEvent e) {
switch (cycle) {
case 0:
// Task #1
break;
case 1:
// Task #2
break;
case 2:
// Task #3
break;
default:
// All done...
((Timer)e.getSource()).stop();
}
cycle++;
}
});
您可以在每个Timer
结束时设置一个新的非重复actionPerformed
,并将其与要执行的下一个ActionListener
/任务一起播种,但这可能会很快变得混乱...
这是这个想法的基本概念。您可以为每项任务设计一个公共interface
,将它们添加到某种类型的List
,然后只需使用list.remove(0)
弹出下一个List
并执行它。您将继续,直到List
为空。
答案 1 :(得分:2)
private int cycle;
Timer swingTimer = new Timer(delay, new ActionListener() {
public void actionPerformed(ActionEvent e) {
controller.callMethod(cycle); // controller decides what to do
cycle++;
}
});
并且在完成所需的循环次数后不要忘记停止计时器。