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) { private void reminderListMouseEntered(java.awt.event.MouseEvent evt) { |
问题是:计时器在启动后没有停止或重新启动或做任何事情,但我需要它。
我对这个问题的解决方案是有一个 int,然后我可以通过 int 的值来控制我希望计时器做什么。但它没有工作,计时器没有停止……
那我做错了什么?
我知道还有其他类似的问题,但是我对 java 还是很陌生,我不明白给出的答案。
谢谢
- 您是否尝试过在 if 块中添加一些带有 System.out.println() 的调试输出,以查看在执行某些操作时它会到达什么代码?
- 我做到了,但是当我发布这个时我把它们拿出来了。他们没有帮助我,我只看到我的 if 语句有效。不过谢谢你的建议!
问题是每次调用 waitReminderList 时你都在创建一个新的 Timer。任何先前运行的 Timer 对象都不会停止。由于您想要一个 Timer 将引用移到方法之外,例如在类上。
不要在你的 waitReminderList() 方法中不断创建一个新的 Timer。您应该将 Timer 定义为类变量。
然后您只需根据需要停止/启动它。
- 成功了,谢谢!现在很有意义,我希望我在发布之前想到它……
来源:https://www.codenong.com/15992196/