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

JavaFX - setVisible не "скрывает" элемент

В JavaFX, если у меня есть сцена с 2 VBox элементами, и каждый VBox имеет в ней несколько Label.
Если я устанавливаю верхний VBox на невидимый, почему нижняя VBox не перемещается вверх, где находится верхний VBox?

VBox невидимый, но я ожидал бы, что другие объекты переместятся на его место.

Я использую FXML для загрузки своих элементов управления.

4b9b3361

Ответ 1

Node.setVisible(boolean) просто переключает состояние видимости Node.

Чтобы исключить Node из своих вычислений макета родителя, вы также должны установить его управляемое состояние, вызвав Node.setManaged(false).

Если вы хотите, чтобы управляемое состояние автоматически обновлялось вместе с видимостью, вы можете использовать привязку, как указывал @jewelsea: node.managedProperty().bind(node.visibleProperty());

Ответ 2

Так как он невидим, он не переместится на верх. Вы должны удалить его с чем-то вроде:

// remove
vbox.getChildren().remove(...)

После удаления элемента, который вы хотите невидимым, другой элемент должен перейти в начало.

Ответ 3

Вместо скрытия vbox вам следует удалить его из "Дети", и если вы хотите снова показать его добавить vbox.

Ответ 4

Если я хочу спрятаться и внутри узла, Я изменяю размер узла до 0, если я хочу скрыть его. Таким образом, узел не будет занимать пространство, так как невидим для использования, поэтому, когда я хочу, чтобы синица была видимой, я снова корректирую размер.