我有一个 JPanel
添加了一个 JLabels
网格。我想要一个 MouseListener
来监听 MouseEvents
,但是 JLabels
似乎挡住了路而且没有 MouseEvent
单击 JLabel
所在的位置时触发。
是否有可靠的方法来监听组件子级的 MouseEvents
?
最佳答案
MouseEvents 被分派(dispatch)到为它们启用的最顶层(按 z 顺序)组件,该组件上注册了 mouseListener 或在内部设置了 eventMask 来处理它们。虽然通常 JLabel 是透明的(因此事件应该到达底层面板),但它们可能会通过 f.i. 变得事件不透明。设置工具提示。
在jdk 7中,你可以use a JLayer获取传递给其子项的所有(鼠标)事件。 JLayer
的文档说:
JLayer is a good solution if you only need to do custom painting over compound component or catch input events from its subcomponents.
jdk6 的前身是 JXLayer project在 Swing 实验室。另一种选择是使用 AWTEventListener,如 Rob's blog 中所述。 (注意:在安全受限的上下文中可能不允许)
关于java - 如何监听子组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8222583/