如何使用Java Swing Timer在每次触发时执行不同的操作?

时间:2014-07-22 00:36:04

标签: java swing timer

让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个连续任务。感谢。

2 个答案:

答案 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++;   
    }
});

并且在完成所需的循环次数后不要忘记停止计时器。