2017-12-14 6 views
1

私はマウスのクリックリスナを分割ペインの分割線に追加しようとしています。ネストされた分割ペインの分割のマウスクリックイベントを検出するにはどうすればよいですか?

これは機能しますが、この分割ペインにネストされた分割ペインがある場合、この分割ペインの分割子を取得する代わりに、子分割ペインの分割を取得します。ここに実例があります。

ご覧のとおり、クリックリスナーはprimarySplitPaneのディバイダに配置されます。ただし、リスナーはsecondarySplitPaneのディバイダに配置されます。

public class DividerTest extends Application { 

    public static void main (String [] args) { 
     launch (args); 

    } 

    @Override 
    public void start (Stage stage) { 

     VBox boxA = new VBox(); 
     VBox boxB = new VBox(); 
     VBox boxC = new VBox(); 

     SplitPane secondarySplitPane = new SplitPane(); 
     secondarySplitPane.getItems().addAll(boxB, boxC); 
     secondarySplitPane.setOrientation(Orientation.VERTICAL); 

     SplitPane primarySplitPane = new SplitPane(); 
     primarySplitPane.getItems().addAll(boxA, secondarySplitPane); 

     primarySplitPane.prefWidthProperty().bind(stage.widthProperty()); 
     primarySplitPane.prefHeightProperty().bind(stage.heightProperty()); 

     Scene scene = new Scene(new Group(), 800, 600); 
     ((Group) scene.getRoot()).getChildren().addAll(primarySplitPane); 
     stage.setScene(scene); 

     stage.show(); 

     Node primaryDivider = primarySplitPane.lookup(".split-pane-divider"); 

     primaryDivider.setOnMouseClicked((e) -> System.out.println ("Clicked")); 
    } 
} 

適切な仕分けを得るために.lookupと言うことができますか?

+0

もっと文脈を与えることができますか?私は試して、あなたのコードが動作しています。 – DVarga

+0

@Dvargaありがとう、詳細情報で編集。 – JoshuaD

答えて

2

コードは垂直ディバイダでは機能していましたが、水平方向では機能していませんでした。これは、最初のものだけでなく、すべての仕切りを収集することで簡単に修正できます。異なる仕切りで異なるアクションを定義する場合は、親を確認することができます。

Set<Node> dividers = primarySplitPane.lookupAll(".split-pane-divider"); 

for (Node divider : dividers) { 
    if (divider.getParent() == primarySplitPane) 
     divider.setOnMouseClicked(e -> System.out.println("Primary Clicked")); 
    else if (divider.getParent() == secondarySplitPane) 
     divider.setOnMouseClicked(e -> System.out.println("Secondary Clicked")); 

} 
関連する問題