如何禁用在JavaFX中拖动splitpane分隔符?

时间:2015-06-30 05:58:08

标签: javafx

我有一个分割窗格,分为4个不同的AnchorPanes。所以有3个分频器,我需要将分频器设置为预定义的大小。我正在使用,

leftSplitPane.setDividerPositions(0.04f, 0.4f, 0.86f);

然而,在用户界面中,分隔线仍然可以拖动。我需要禁止拖动这些分隔线。我在SceneBuilder中尝试了ResizableWithParent。但它不起作用。我也尝试将锚板绑定到这样的splitpane,但这似乎不对。

leftAnchorPane.maxWidthProperty().bind(leftSplitPane.widthProperty().multiply(1));

请帮我解决这个问题。

1 个答案:

答案 0 :(得分:3)

实现此目的的一种方法是在其更改侦听器上将分隔符位置设置为固定值:

final double pos[] =
{
    0.3f, 0.6f, 0.9f
};

sp.setDividerPositions( pos );

for ( int i = 0; i < sp.getDividers().size(); i++ )
{
    final int ind = i;
    SplitPane.Divider divider = sp.getDividers().get( i );
    divider.positionProperty().addListener(
            ( ObservableValue<? extends Number> observable, Number oldValue, Number newValue ) ->
            {
                divider.setPosition( pos[ind] );
            } );
}

隐含的完整示例:

@Override
public void start( Stage primaryStage )
{
    SplitPane sp = new SplitPane();
    final StackPane sp1 = new StackPane();
    sp1.getChildren().add( new Button( "Button One" ) );
    final StackPane sp2 = new StackPane();
    sp2.getChildren().add( new Button( "Button Two" ) );
    final StackPane sp3 = new StackPane();
    sp3.getChildren().add( new Button( "Button Three" ) );
    sp.getItems().addAll( sp1, sp2, sp3 );

    final double pos[] =
    {
        0.04f, 0.4f, 0.86f
    };

    sp.setDividerPositions( pos );

    for ( int i = 0; i < sp.getDividers().size(); i++ )
    {
        final int ind = i;
        SplitPane.Divider divider = sp.getDividers().get( i );
        divider.positionProperty().addListener(new ChangeListener<Number>()
        {
            @Override
            public void changed( ObservableValue<? extends Number> observable, Number oldValue, Number newValue )
            {
                divider.setPosition( pos[ind] );
            }
        });
    }

    Scene scene = new Scene( sp, 400, 400 );
    primaryStage.setScene( scene );
    primaryStage.show();
}