0

JavaFX StackPane イベント処理に苦労しています。

スタックペインにマウスを移動すると、 MapController.onMouseMoved() が呼び出され、これは明らかです。

Web ページには、onmousemove イベントを処理するスクリプトがあります。スクリプトは、WebView が StackPane の一番上にある場合、または WebView の上に配置された Pane が mouseTransparent の場合に機能します。これは、イベント ターゲットが WebView の場合です。

私の問題:
イベント ターゲットが fxml フラグメントのようなペインである場合を処理する必要があります。Web ページ内でスクリプトを実行するには、兄弟の 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>
4

1 に答える 1

2

少し前に解決策を見つけました。以下は、同様の問題に直面している人のためのコードの断片です。

/** 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 も必要なイベントを受け取ります。

于 2015-08-17T09:47:25.077 に答える