如何在 JavaFX 中将事件发送到堆栈窗格上的兄弟姐妹
How to send event to sibling on stackpane in JavaFX
我正在努力处理 JavaFX StackPane 事件。
当我将鼠标移到堆栈窗格上时,会调用 MapController.onMouseMoved(),这对我来说很清楚。
该网页包含应处理 onmousemove 事件的脚本。当我的 WebView 在我的 StackPane 顶部或当放置在 WebView 上的窗格是 mouseTransparent 时,该脚本有效。当事件目标是我的 WebView 时就是这种情况。
我的问题:
我需要处理事件目标是我的 Pane 的情况,就像在 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();
});
我只是拦截我的窗格级别上的所有事件,然后为其同级 (WebView) 创建副本,然后我使用原始事件以防止其传播。
属于窗格的组件的所有必需事件都得到处理,我的 WebView 也接收到必需的事件。
我正在努力处理 JavaFX StackPane 事件。
当我将鼠标移到堆栈窗格上时,会调用 MapController.onMouseMoved(),这对我来说很清楚。
该网页包含应处理 onmousemove 事件的脚本。当我的 WebView 在我的 StackPane 顶部或当放置在 WebView 上的窗格是 mouseTransparent 时,该脚本有效。当事件目标是我的 WebView 时就是这种情况。
我的问题:
我需要处理事件目标是我的 Pane 的情况,就像在 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();
});
我只是拦截我的窗格级别上的所有事件,然后为其同级 (WebView) 创建副本,然后我使用原始事件以防止其传播。
属于窗格的组件的所有必需事件都得到处理,我的 WebView 也接收到必需的事件。