2016-09-15 7 views
2

に子と親の両方のハンドラによって処理マウスのクリックイベントを避けたい - 両方がイベントをsetOnMouseClickedている...>グループ[チャイルド]コード..私は現在、私のJavaFXのプログラムで、私は</p> <p>AnchorPane [親]のような構造を持っているのJavaFX 8

私の問題は今、私は

    ような機能を持つようにしたい状況がある...子ノードをクリックし、子ノードのsetOnMouseClickedは、最初に実行して、親ノードのsetOnMouseClickedが実行されます場合は

    です

  • 子ノードのsetOnMouseClickedが実行された場合は、
  • 親ノードのsetOnMouseClickedは実行されませはずです。..

どのように私はこれを達成できますか?詳細は下の画像をご確認ください。私は親ノードをクリックした場合

enter image description here

  1. は今 -
  2. しかし、たとえ...>デ・セレクト子ノード - 選択された子ノードの選択が解除されなければならない> ..だから私は親Node.setOnMouseClickedを書きます子ノードをクリックして選択する - >親ノードのsetOnMouseClickedを実行する - >子ノードを直ちに選択解除する。

この問題はアーキテクチャ上の問題として、コード例を掲載しないように見受けられます。

貴重なご提案をお知らせください。あなたの助けが高く評価されるでしょう。ここで

+0

イベントフィルタと消費イベント - [this](https://docs.oracle.com/javase/8/javafx/events-tutorial/processing.htm)を参考にしてください。 – Itai

答えて

2

は、イベントを消費するの小さな一例である - 消費されたイベントは、次のリスナーに至るバブルません。

@Override 
public void start(Stage stage) throws Exception { 
    Canvas c = new Canvas(400, 400); 
    Pane p = new Pane(c); 
    p.setOnMouseClicked(me -> { 
     System.out.println("Pane mouse click: " + me.getX() + ", " + me.getY()); 
    }); 
    c.setOnMouseClicked(me -> { 
     System.out.println("Canvas mouse click: " + me.getX() + ", " + me.getY()); 
     if (me.getX()>200) { 
      System.out.println("Consuming event"); 
      me.consume(); 
     } 
    }); 
    stage.setScene(new Scene(p)); 
    stage.show(); 
} 

左側の部分と、その後Canvasの右の部分をクリックすると、あなたが取得します二度目はPaneイベントリスナが実行されなかったか

Canvas mouse click: 96.0, 174.0 
Pane mouse click: 96.0, 174.0 
Canvas mouse click: 373.0, 180.0 
Consuming event 

注意:このような何か。もちろん、任意のロジックを使用してイベントを消費するかどうかを判断できます。

関連する問題