Reputation: 1333
I have a splitpane which is divided into 4 different AnchorPanes. So there are 3 dividers and I need to set the dividers at a predefined size. I'm doing that using,
leftSplitPane.setDividerPositions(0.04f, 0.4f, 0.86f);
However in the UI, the dividers are still draggable. I need to disallow dragging of these dividers. I tried ResizableWithParent
in SceneBuilder. But it doesn't work. I also tried to bind the anchorpane to splitpane like this, but it seems wrong.
leftAnchorPane.maxWidthProperty().bind(leftSplitPane.widthProperty().multiply(1));
Please help me on this.
Upvotes: 0
Views: 3509
Reputation: 49215
One way to achieve this is to set the divider position to fixed value on its change listener:
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] );
} );
}
Implicit full example:
@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();
}
Upvotes: 3