Javafx, как вызвать обновление макета сцены - PullRequest
3 голосов
/ 24 февраля 2020

У меня очень простое приложение Javafx, которое отображает форму, подкрепленную сеткой. В этой форме у меня есть флажок. Когда пользователь устанавливает этот флажок, я хочу динамически добавить еще одну строку в сетку.

С моего контроллера:

checkbox.selectedProperty().addListener((obs, oldVal, newVal) - > {
    if (!newVal) {
        // Add Username Label
        gridPane.add(new Label("Username : "), 0, 5);

        // Add Username Text Field
        gridPane.add(new TextField(), 1, 5);
    }
});

Приведенный выше код работает нормально, единственная проблема - окно макет не обновляется, чтобы показать новую строку (я имею в виду, высота не увеличивается автоматически), если я не изменю размер окна вручную.

Вопрос Как вызвать обновление макета? (Я пытался gridPane.requestLayout(), но это не имеет никакого эффекта)

ОБНОВЛЕНИЕ

Уродливый обходной путь - скрыть, а затем снова показать сцену.

1 Ответ

4 голосов
/ 24 февраля 2020

Чтобы изменить размер сцены до размера ее содержимого, вы можете использовать унаследованный метод sizeToScene(). Следующее изменит размер сцены, чтобы ответить на ваш новый ряд:

checkbox.selectedProperty().addListener((obs, oldVal, newVal) - > {

    if (!newVal) {
        // Add Username Label
        gridPane.add(new Label("Username : "), 0, 5);

        // Add Username Text Field
        gridPane.add(new TextField(), 1, 5);
        gridPane.getScene().getWindow().sizeToScene();
    }
});
...