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谢谢,用更多信息编辑。