这对我来说有点奇怪,但是当光标位于 JTextField 和 JToolBar 子组件上时,JPanel 不会生成 MouseEvents,但当光标位于 JLabel 上时,它会生成 MouseEvents。有人可以解释我为什么吗?有没有办法强制 JPanel 生成事件,即使鼠标位于子组件上?
事件调度程序会将鼠标事件转发给注册到包级返回的组件的侦听器getMouseEventTarget
中的方法Container
。这将在您的JFrame
,并且正如 JavaDoc 所示,它:
获取对接收鼠标事件感兴趣的最顶层(最深)的轻量级组件。
然后,事件调度程序采用这个最顶层的组件(您的JTextField
,例如)并仅向其所有侦听器发送事件。他们这样做是为了避免将这些事件广播到可能分层在 Swing 容器中的所有组件。正如您可以想象的那样,MouseEvents 非常健谈,所有这些mouseEntered
, mouseDragged
, and mouseMoved
为所有的事件调度MouseListener
and MouseMotionListener
潜在的实现。查找所有侦听器然后向层次结构中的所有侦听器触发事件的处理过程将非常耗时。
假设还对于像这样的类JTextField
and JButton
等等,默认的鼠标处理就足够了。如果您想以不同的方式处理鼠标操作(即更改颜色)mouseEntered
/mouseExited
),您可以添加一个MouseListener
根据需要使用这些小部件。
对于您的处理,我建议简单地添加您的JPanel
as a MouseListener
如果您需要处理这些事件,请访问您的顶级组件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)