首页 > 解决方案 > Java Swing:如何通过 JLayeredPane 传递鼠标事件

问题描述

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

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

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

在 JavaFX 中,如果鼠标位于透明像素上方,则StackPane组件必须将鼠标事件传递给下方的框架。setPickOnBounds(false)

里面有类似的东西JLayeredPane吗?

标签: javaswingmouseeventjlayeredpane

解决方案


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

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

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

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

推荐阅读