JavaFx:禁用分隔符

时间:2014-11-05 17:03:13

标签: javafx scenebuilder divider splitpane

我的 JavaFX 应用程序带有 SplitPane 。我想在 SplitPane 上禁用分隔符,因此在应用程序运行时无法更改其位置。我怎么能这样做?

4 个答案:

答案 0 :(得分: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) );

}

答案 1 :(得分:3)

以上所有职位均不为我工作。我找到了适合我的解决方案: 该代码适用于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);
        }
    }); 

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

答案 2 :(得分:1)

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

<SplitPane dividerPositions="0.5" mouseTransparent="true" prefHeight="652.0" prefWidth="858.0">

答案 3 :(得分:0)

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