Java Swing:如何通过JLayeredPane传递鼠标事件

Java Swing: how to pass mouse events through JLayeredPane

JLayeredPane 可以将鼠标事件从顶层传递到下层吗?

我在 JLayeredPane 中有两个组件:一个 JFrame 显示地图,另一个 JEditorPane 在其顶部显示 HTML 文本。 JEditorPane 是部分透明的,用作叠加层,在地图顶部显示文本,但在其他方面不可见。

我的问题:当鼠标移动到JEditorPane的透明部分时,地图的JFrame没有得到鼠标事件。

在 JavaFX 中,StackPane 组件具有 setPickOnBounds(false) 以在鼠标悬停在透明像素上时将鼠标事件传递到下方的框架。

JLayeredPane 中有类似的东西吗?

要将鼠标事件 e 传递给组件 c,请使用

    c.dispatchEvent(SwingUtilities.convertMouseEvent(e.getComponent(), e, c));

例如,要将鼠标单击事件从 b 传递到 c,请使用

b.addMouseListener(
        new MouseAdapter() {
          @Override
          public void mouseClicked(MouseEvent e) {
            c.dispatchEvent(SwingUtilities.convertMouseEvent(b, e, c));
          }
        });