如何听儿童组件?

时间:2011-11-22 05:53:50

标签: java swing mouseevent jcomponent mouselistener

我添加了JPanel网格JLabels。我希望MouseListener能够收听MouseEvents,但JLabels似乎挡不住,点击{{1}的位置时,MouseEvent无法触发JLabel找到了。

是否有一种方便的方式来听取组件孩子的MouseEvents

1 个答案:

答案 0 :(得分:8)

将MouseEvents调度到为它们启用的最顶层(按z顺序)组件,其上注册了mouseListener,或者在内部设置了eventMask来处理它们。虽然通常JLabel是透明的(因此事件应该到达底层面板),但是f.i可能会使事件不透明。设置工具提示。

在jdk 7中,您可以use a JLayer获取传递给其子级的所有(鼠标)事件。 JLayer的文档说:

  

如果您只需要自定义绘画,JLayer是一个很好的解决方案   复合组件或捕获其子组件的输入事件

它的前身是jdk6,是SwingLabs中的JXLayer project。另一种选择是使用AWTEventListener,如Rob's blog中所述(注意:在安全限制的上下文中可能不允许)