7

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

4

4 回答 4

9

没有 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) );

}
于 2014-11-05T17:14:22.130 回答
4

以上帖子都不适合我。我找到了对我有用的解决方案:此代码适用于您的 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);
        }
    }); 

此代码在initialize()GUI Controller 类的方法中。

于 2018-06-24T17:46:32.603 回答
2

在 Fxml 文件中设置 SplitPane 的 mouseTransparent="true"。

<SplitPane dividerPositions="0.5" mouseTransparent="true" prefHeight="652.0" prefWidth="858.0">
于 2016-11-10T14:53:29.187 回答
0

您还可以修改 SplitPane 的 Skin 类。只需从 GrepCode 复制 SplitPaneSkin 的代码(可在此处获得)并删除方法 initializeDivderEventHandlers() 中的 MouseListeners 以及方法 setGrabberStyle() 中的 setCursor 调用,然后您无法通过拖动分隔线来调整窗格大小;-) 最后您只需通过调用 setSkin 将皮肤设置为 SplitPane。

于 2015-06-16T11:41:23.670 回答