我有一个JPanel,我想检测以下事件
(1)当鼠标移动时
(2)当鼠标移出时
(1)很容易。 (2)有点棘手。目前,我必须在JPanel周围的所有组件上注册事件。如果JPanel周围的邻居在事件中检测到鼠标移动,这也意味着JPanel有(2)情况。然而,这是相当肮脏的,因为我将来添加新的组件,这个肮脏的解决方法将会破坏。
另一种方法是使用计时器来监控JPanel。如果鼠标位置在x秒内不在JPanel内,我可以考虑让JPanel有鼠标移出事件。
然而,这对我来说似乎也是一种肮脏的方式,因为有一个单独的计时器来执行这样的常见任务是过度的。
Java平台可能提供更好的方法吗?
答案 0 :(得分:6)
让您的类实现MouseListener并将其作为鼠标侦听器添加到最外面的面板上。当鼠标在面板上移动时,您应该获得鼠标输入事件,并在鼠标离开时退出鼠标;无论面板包含哪些组件。
来自JavaDoc:
void mouseEntered(MouseEvent e) 鼠标进入组件时调用。
void mouseExited(MouseEvent e) 鼠标退出组件时调用。