2017-12-14 12 views
1

분할 창 분할 자에 마우스 클릭 수신기를 추가하려고합니다.Nested Split Pane 's Divider에서 마우스 클릭 이벤트를 감지하는 방법은 무엇입니까?

작동하지만,이 분할 창에 분할 창이 중첩되어있는 경우이 분할 창 분할자를 가져 오는 대신 자식 분할 창 분할자를 가져옵니다. 다음은 작동하는 예제입니다.

여기서 알 수 있듯이 여기서는 클릭 수신기를 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")); 

}