Java 如何检测嵌套拆分窗格上的鼠标单击事件';s分割器?

Java 如何检测嵌套拆分窗格上的鼠标单击事件';s分割器?,java,javafx,javafx-8,Java,Javafx,Javafx 8,我正在尝试将鼠标单击侦听器添加到拆分窗格的分隔符中 public class DividerTest extends Application { public static void main ( String [] args ) { launch ( args ); } @Override public void start ( Stage stage ) { VBox boxA = new VBox();

我正在尝试将鼠标单击侦听器添加到拆分窗格的分隔符中

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" ) );
    }
}
它可以工作,但是如果在这个拆分窗格中嵌套了一个拆分窗格,那么我将得到子拆分窗格的分隔符,而不是得到这个拆分窗格的分隔符。下面是一个工作示例

如您所见,这里的目的是将click侦听器放在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" ) );
    }
}

如何判断。查找以获得正确的除法器

您的代码在垂直分隔符上工作,而不是在水平分隔符上工作。这可以简单地通过收集所有的分隔符来解决,而不仅仅是第一个分隔符。如果要在不同的分隔符上定义不同的操作,可以检查父项:

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"));

}
Set dividers=primarySplitPane.lookupAll(“.split pane dividers”);
用于(节点分隔器:分隔器){
if(divider.getParent()==primarySplitPane)
divider.setonmouseClicated(e->System.out.println(“主单击”);
else if(divider.getParent()==secondarySplitPane)
separator.setonmouseclicated(e->System.out.println(“二次单击”);
}

您能提供更多的上下文吗?我试过了,你的代码正在运行。@Dvarga谢谢,用更多信息编辑。