gpt4 book ai didi

java - 如何在 JavaFX 中向 stackpane 上的同级发送事件

转载 作者:行者123 更新时间:2023-12-02 04:45:36 31 4
gpt4 key购买 nike

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

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

网页有应该处理 onmousemove 事件的脚本。当我的 WebView 位于 StackPane 顶部或放置在 WebView 上的 Pane 为 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();
});

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

属于该 Pane 的组件的所有必需事件均已处理,并且我的 WebView 也接收所需事件。

关于java - 如何在 JavaFX 中向 stackpane 上的同级发送事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29687223/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com