我添加了JPanel
网格JLabels
。我希望MouseListener
能够收听MouseEvents
,但JLabels
似乎挡不住,点击{{1}的位置时,MouseEvent
无法触发JLabel
找到了。
是否有一种方便的方式来听取组件孩子的MouseEvents
?
答案 0 :(得分:8)
将MouseEvents调度到为它们启用的最顶层(按z顺序)组件,其上注册了mouseListener,或者在内部设置了eventMask来处理它们。虽然通常JLabel是透明的(因此事件应该到达底层面板),但是f.i可能会使事件不透明。设置工具提示。
在jdk 7中,您可以use a JLayer获取传递给其子级的所有(鼠标)事件。 JLayer
的文档说:
如果您只需要自定义绘画,JLayer是一个很好的解决方案 复合组件或捕获其子组件的输入事件。
它的前身是jdk6,是SwingLabs中的JXLayer project。另一种选择是使用AWTEventListener,如Rob's blog中所述(注意:在安全限制的上下文中可能不允许)