Подтвердить что ты не робот

Как изменить размер содержимого ScrollPane в JavaFX, чтобы он соответствовал текущему размеру

У меня есть BorderPane с ScrollPane как элемент центра. Он автоматически изменяет размер, чтобы заполнить экран. Внутри ScrollPane есть HBox, который не имеет содержимого, но является целью перетаскивания. Поэтому я хочу, чтобы он заполнил его родительский ScrollPane.

Каков предпочтительный способ сделать это?

То, что я пробовал до сих пор, переопределяет метод ScrollPane.resize(...) для изменения размера HBox, но он кажется довольно сложным и неортодоксальным.

edit: Чтобы добавить к нему полезный код, я могу решить эту проблему, но я считаю, что для этого нужно сделать несколько лучших способов:

@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);
}

Код, частично взятый отсюда: Как получить доступ к полосам прокрутки ScrollPane

4b9b3361

Ответ 1

Try

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

без переопределения метода resize().

Ответ 2

Установка атрибута fitToHeight или fitToWidth через XML или CSS:

FXML:

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

CSS

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