关于java:如何在鼠标退出事件上启动定时器并在鼠标进入事件上停止同一个定时器?

How to start a Timer on a mouse exit event and stop that same Timer on a mouse enter event?

我有一个名为 reminderList.

的列表

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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 还是很陌生,我不明白给出的答案。

谢谢


问题是每次调用 waitReminderList 时你都在创建一个新的 Timer。任何先前运行的 Timer 对象都不会停止。由于您想要一个 Timer 将引用移到方法之外,例如在类上。


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

然后您只需根据需要停止/启动它。