我有一个JPanel
添加了一个网格JLabels
。我想要一个MouseListener
来收听MouseEvents
,但JLabels
似乎是在阻止,并且在JLabel
所在位置点击时没有MouseEvent
触发。如何聆听儿童组件?
是否有一种可靠的方式来收听组件的子项的MouseEvents
?
我有一个JPanel
添加了一个网格JLabels
。我想要一个MouseListener
来收听MouseEvents
,但JLabels
似乎是在阻止,并且在JLabel
所在位置点击时没有MouseEvent
触发。如何聆听儿童组件?
是否有一种可靠的方式来收听组件的子项的MouseEvents
?
MouseEvents被调度到为它们启用的最顶层(z顺序)组件,该组件已经在其上注册了mouseListener,或者在内部已经设置了eventMask来处理它们。虽然通常JLabel是透明的(因此事件应该到达底层面板),但它们可能会通过f.i获得事件不透明。设置一个工具提示。
在jdk 7中,您可以use a JLayer掌握所有(鼠标)传递给其子女的事件。的JLayer
文档说:
JLayer是一个很好的解决方案,如果你只需要做的风俗画过 复合成分或将其从子捕捉输入事件。
它的前身jdk6是在SwingLabs中的JXLayer project。还有一种选择是使用AWTEventListener,如Rob's blog(注意:可能不允许在安全受限的上下文中)中所述。
非常感谢您解释清楚的答案。我对每个JLabel都有工具提示,我甚至没有想到这一点。 –
肯定是最好的和最重要的关于这个话题的答案 - 谢谢。 – Balder
无论何时添加组件,父节点是否可以将自己添加为侦听器? –