JavaFX - setVisible не "скрывает" элемент
В JavaFX, если у меня есть сцена с 2 VBox
элементами, и каждый VBox
имеет в ней несколько Label
.
Если я устанавливаю верхний VBox
на невидимый, почему нижняя VBox
не перемещается вверх, где находится верхний VBox
?
VBox
невидимый, но я ожидал бы, что другие объекты переместятся на его место.
Я использую FXML для загрузки своих элементов управления.
Ответы
Ответ 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, если я хочу скрыть его. Таким образом, узел не будет занимать пространство, так как невидим для использования, поэтому, когда я хочу, чтобы синица была видимой, я снова корректирую размер.