2016-06-14 8 views
5

Event Handling in JavaFXを理解しようとしていましたが、この行が見つかりました。JavaFXでイベントが消費される意味は何ですか

ルートは、イベントフィルタとイベントハンドラとして変更することができます。 ルートプロセスはイベントを処理します。また、イベントフィルタまたはイベントハンドラ がイベントを任意の時点で消費する場合、初期ルートの一部のノードでは、 がイベントを受信しないことがあります。

イベントの消費の意味を説明できますか?

答えて

8

イベントは特定のルートに沿って渡されます。ほとんどの場合(例えば、マウス/キーイベント)、ルートはSceneのルートNodeから始まり、ルートNodeからシーングラフのターゲットNodeまでのパスにすべてNodeが含まれます。ターゲットNodeへのルートでは、イベントフィルタが実行され、それらのフィルタのいずれかがイベントを消費する必要がある場合、これはイベントのそれ以上の処理を停止します。イベントがNodeのターゲットに到達すると、 "travels"が何らかのイベントを呼び出すルートに戻る場合、途中でハンドラが続きます。イベントの処理は、イベントを消費することによってもそこで停止することができます。

例:あなたはrectをクリックすると

@Override 
public void start(Stage primaryStage) { 
    Rectangle rect = new Rectangle(50, 50); 

    StackPane root = new StackPane(rect); 

    rect.addEventFilter(MouseEvent.MOUSE_CLICKED, evt -> { 
     System.out.println("rect click(filter)"); 
//  evt.consume(); 
    }); 
    root.addEventFilter(MouseEvent.MOUSE_CLICKED, evt -> { 
     System.out.println("root click(filter)"); 
//  evt.consume(); 
    }); 

    root.setOnMouseClicked(evt -> { 
     System.out.println("root click(handler)"); 
//  evt.consume(); 
    }); 
    rect.setOnMouseClicked(evt -> { 
     System.out.println("rect click(handler)"); 
//  evt.consume(); 
    }); 

    Scene scene = new Scene(root, 200, 200); 

    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 

、イベント処理がrootNodeから始まります。ここでフィルタが実行されます。イベントがフィルタで消費されない場合は、rectNodeに渡され、そこでイベントフィルタがイベントを受信します。そのイベントがフィルタによって消費されない場合、rectというイベントハンドラがイベントを受け取ります。そのイベントハンドラによってイベントがconnsumedされていない場合、rootNodeのイベントハンドラがイベントを受け取ります。

だけevt.consume()呼び出しのいくつかのコメントを解除して...お返事のための

+0

おかげで何が起こるかを参照してください。便利なメソッド 'setOnAction'などのイベントハンドルと' addEventHandler() 'の違いは何ですか? – UnKnown

+1

@知らない新しい質問として新しい質問をするのが最善です。 – jewelsea

関連する問題