4

我有一个添加JPanel的网格JLabels。我MouseListener想听a MouseEvents,但是在单击 a 所在的位置时,它JLabels似乎挡住了路并且没有MouseEvent起火JLabel

是否有可靠的方法来收听MouseEvents组件的子级?

4

1 回答 1

8

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

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

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

jdk6 的前身是 SwingLabs 中的JXLayer 项目。另一种选择是使用 AWTEventListener,如Rob 的博客中所述(注意:在安全受限的上下文中可能不允许使用)

于 2011-11-22T08:05:52.573 回答