JavaFx:禁用分隔符

mir*_*zak 6 javafx divider scenebuilder splitpane

我有一个带有SplitPaneJavaFX应用程序.我想在SplitPane上禁用Divider,因此在应用程序运行时无法更改其位置.我怎样才能做到这一点?

Jos*_*eda 8

没有API,所以一旦显示场景,我们必须使用查找功能通过其id找到节点.在这种情况下,Divider有这个id : split-pane-divider.

找到节点后,我们将其设置为对鼠标事件透明:

@Override
public void start(Stage primaryStage) {
    final SplitPane splitPane = new SplitPane();
    splitPane.setOrientation(Orientation.HORIZONTAL);
    splitPane.setDividerPositions(new double[]{0.5});
    splitPane.getItems().add(new StackPane(new Label("Left")));
    splitPane.getItems().add(new StackPane(new Label("Right")));

    Scene scene = new Scene(splitPane, 300, 250);

    primaryStage.setScene(scene);
    primaryStage.show();

    splitPane.lookupAll(".split-pane-divider").stream()
            .forEach(div ->  div.setMouseTransparent(true) );

}
Run Code Online (Sandbox Code Playgroud)


Dom*_*Dom 6

上述帖子都不适合我。我找到了这个对我有用的解决方案:此代码适用于 splitPane 在中间划分并且只有一个分隔线的情况,因此分隔线的位置设置为0.5。如果您不知道分隔线的位置,可以通过 获取divider.getPosition();

        Divider divider = splitPane.getDividers().get(0);
    divider.positionProperty().addListener(new ChangeListener<Number>()      
    {             
        @Override 
        public void changed( ObservableValue<? extends Number> observable, Number oldvalue, Number newvalue )
        {
            divider.setPosition(0.5);
        }
    }); 
Run Code Online (Sandbox Code Playgroud)

该代码位于initialize()GUI Controller 类的方法中。