В JavaFX, если у меня есть сцена с двумя VBox
элементами, и в каждом VBox
есть несколько элементов Label
.
Если я устанавливаю верх VBox
к невидимому , почему дну VBox
не двигаться вверх сцена , где верх VBox
был?
VBox
Является невидимым , но я бы ожидать , что другие объекты , чтобы переместить на место.
Я использую FXML для загрузки элементов управления.
VBox
просто невидим, а неremoved
от своего родителя.Ответы:
Node.setVisible(boolean)
просто переключает состояние видимостиNode
.Чтобы исключить a
Node
из вычислений его родительского макета, вам дополнительно необходимо установить его управляемое состояние, вызвавNode.setManaged(false)
.Если вы хотите, чтобы управляемое состояние обновлялось автоматически вместе с видимостью, вы можете использовать привязку, как указано в @jewelsea:
node.managedProperty().bind(node.visibleProperty());
источник
node.managedProperty().bind(node.visibleProperty());
Поскольку он невидим, он не переместится наверх. Вы должны удалить это примерно так:
// remove vbox.getChildren().remove(...)
После того, как вы удалили элемент, который хотите сделать невидимым, другой элемент должен переместиться наверх.
источник
Вместо того, чтобы скрывать vbox, вы должны удалить его из детей, и если вы хотите снова показать его, добавьте vbox.
источник
Попробуйте использовать setVisible и managedProperty вместе. Вот пример:
myHBox.setVisible(false); myHBox.managedProperty().bind(myHBox.visibleProperty());
источник
Если я хочу скрыть и показать узел, я изменяю размер узла на 0, если я хочу его скрыть. Таким образом, узел не будет занимать место, поскольку он не виден пользователю, поэтому, когда я хочу, чтобы он был виден, я снова регулирую размер, чтобы он был видимым.
источник