如何在鼠标退出事件上启动Timer并在鼠标输入事件上停止相同的Timer?

时间:2013-04-13 19:51:18

标签: java swing timer jlist

我有一个名为reminderList的列表。

当鼠标点击列表中的某个项目并且鼠标退出列表时,我想要一个计时器启动。

当鼠标进入列表时,我希望该计时器停止,如果它仍在运行。

当鼠标再次退出列表时,我希望重新启动相同的计时器。

public void waitReminderList(int status) {
    Timer timer = new Timer(10000, new ActionListener() {
        public void actionPerformed(ActionEvent evt) {
            reminderList.clearSelection();
            dismissReminder.setEnabled(false);
        }
    });
    if (status == 0) {
        if (!reminderList.isSelectionEmpty()) {
            timer.setRepeats(false);
            timer.restart();
            timer.start();
        }
    } else if (status == 1) {
        if (!reminderList.isSelectionEmpty()) {
            timer.stop();
        }
    }

private void reminderListMouseExited(java.awt.event.MouseEvent evt) {                                         
    waitReminderList(0);
} 

private void reminderListMouseEntered(java.awt.event.MouseEvent evt) {                                          
    waitReminderList(1);
}

问题是:计时器在启动后没有停止或重启或做任何事情,但我需要它。

我对问题的解决方案是拥有一个int,然后我可以通过int的值来控制我想要的计时器。但它不起作用,计时器不会停止......

那么我做错了什么?

我知道还有其他这样的问题但是,我仍然是相当新的java,我不明白给出的答案。

谢谢

2 个答案:

答案 0 :(得分:2)

问题在于,每次调用Timer时都会创建一个新的waitReminderList。以前运行的任何Timer对象都不会停止。由于您希望单个Timer移动参考之外的方法,例如在班级。

答案 1 :(得分:1)

不要在waitReminderList()方法中继续创建新的Timer。您应该将Timer定义为类变量。

然后你可以根据需要停止/启动它。