java - 如何监听子组件?

标签 java swing mouseevent jcomponent mouselistener

我有一个 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/

相关文章:

java - 网络 Swing 游戏中的多线程 : using invokeLater vs locks

jquery - 是否可以在 jQuery 中控制鼠标的附加按钮

c++ - 将鼠标点击发送到 WebEngineView Qt C++

javascript - 这个 MouseEvent 属性从何而来?

java - Wicket 6 !continueToOriginalDestination : operator ! 未定义

java - 运行具有属性文件关联的 Junit 时如何访问 XML 文件?

java - 错误 500 - NoClassDefFoundError : org/hsqldb/lib/LongValueHashMap

java - 静态内容 - Spring MVC

java - 从 ComboBox 的内容中获取变量

java - Swing:FileDialog 陷入漫长的过程