我试图将鼠标点击监听器添加到拆分窗格的分隔符中。
它可以工作,但是如果在此拆分窗格中嵌套了一个拆分窗格,而不是获取此拆分窗格的分隔符,我会得到子拆分窗口的分隔符。这是一个有效的例子。
如您所见,这里的目的是将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" ) );
}
}
如何告诉.lookup获取正确的分隔符?
答案 0 :(得分: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"));
}