How to resize JavaFX ScrollPane content to fit current size

ResizeJavafxAutolayoutScrollpane

Resize Problem Overview


I have a BorderPane with a ScrollPane as the center element. It resizes automatically to fill the screen. Inside the ScrollPane is a HBox that has no content but is a drag-and-drop target. Therefore I want it to fill its parent ScrollPane.

What is the preferred way to do this?

What I have tried so far is overriding the ScrollPane.resize(...) method to resize the HBox but it seems rather complicated and unorthodox.

edit: To add some useful code to this, this is how I can workaround the problem, but I believe there has to be some better way to do this:

@Override
public void resize(double width, double height) {
	super.resize(width, height);
	
	double scrollBarHeight = 2;
	double scrollBarWidth = 2;
	
	for (final Node node : lookupAll(".scroll-bar")) {
        if (node instanceof ScrollBar) {
            ScrollBar sb = (ScrollBar) node;
            if (sb.getOrientation() == Orientation.HORIZONTAL) {
                System.out.println("horizontal scrollbar visible = " + sb.isVisible());
                System.out.println("width = " + sb.getWidth());
                System.out.println("height = " + sb.getHeight());
                if(sb.isVisible()){
                	scrollBarHeight = sb.getHeight();
                }
            }
            if (sb.getOrientation() == Orientation.VERTICAL) {
                System.out.println("vertical scrollbar visible = " + sb.isVisible());
                System.out.println("width = " + sb.getWidth());
                System.out.println("height = " + sb.getHeight());
                if(sb.isVisible()){
                	scrollBarWidth = sb.getWidth();
                }
            }
        }
    }
	
	hBox.setPrefSize(width-scrollBarWidth, height-scrollBarHeight);
}

Code partly taken from here: https://stackoverflow.com/questions/12678317/how-to-access-the-scrollbars-of-a-scrollpane

Resize Solutions


Solution 1 - Resize

Try

ScrollPane scrollPane = new ScrollPane();
scrollPane.setFitToHeight(true);
scrollPane.setFitToWidth(true);

without overriding the resize() method.

Solution 2 - Resize

Setting the fitToHeight or fitToWidth attribute through XML or CSS:

FXML:

<ScrollPane fx:id="myScrollPane" fitToHeight="true" fitToWidth="true" />

CSS:

.my-scroll-pane {
    -fx-fit-to-height: true;
    -fx-fit-to-width: true;
}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionLennertView Question on Stackoverflow
Solution 1 - ResizeUluk BiyView Answer on Stackoverflow
Solution 2 - ResizeNDYView Answer on Stackoverflow