如何在 JavaFX 中将事件发送到堆栈窗格上的同级



我正在努力处理JavaFX StackPane事件。

当我将鼠标移到堆栈窗格上时,调用MapController.onMouseMoved(),这对我来说很清楚。

网页具有应处理鼠标移动事件的脚本。当我的 WebView 位于我的 StackPane 的顶部或放置在 WebView 上的窗格是 mouseTransparent 时,该脚本有效。当事件目标是我的 Web 视图时,就是这种情况。

我的问题:
我需要处理事件目标是我的窗格的情况,就像在 fxml 片段中一样。我还需要将鼠标移动事件重新发送到同级 WebView,以便在网页中执行脚本。换句话说,我想从 WebView 中触发另一个鼠标事件。请根据下面的 fxml 片段使用经过验证的示例进行回复。

<StackPane xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="foo.bar.MapController">
    <WebView fx:id="m_projectsWebView" prefHeight="600.0" prefWidth="800.0"/>
    <Pane fx:id="m_devicesLayer" onMouseMoved="#onMouseMoved"/>
</StackPane>

我不久前找到了一个解决方案,下面是那些面临类似问题的人的代码片段。

/** redirect events to a sibling node (m_projectsWebView) */
    m_devicesLayer.addEventHandler(Event.ANY, event -> {
        if (!(event instanceof MouseEvent) {
            m_projectsWebView.fireEvent(event.copyFor(m_projectsWebView, m_projectsWebView));
        }
        event.consume();
    });

我只是截获 Pane 级别上的所有事件,然后为其同级 (WebView) 创建副本,然后使用原始事件以防止其传播。

将处理属于窗格的组件的所有必需事件,并且我的 WebView 也会接收所需的事件。

相关内容

  • 没有找到相关文章

最新更新