JavaFX - setVisible скрывает элемент, но не меняет порядок соседних узлов


86

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

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

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


2
Потому что первый VBoxпросто невидим, а не removedот своего родителя.
ItachiUchiha

1
занимают ли скрытые узлы какое-либо место или нет, обычно
решает

Ответы:


169

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

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

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


51
Связывания также работает , например,node.managedProperty().bind(node.visibleProperty());
jewelsea

7

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

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

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


3
AFAIK, манипулирование графом сцены дороже, чем установка visible на false.
Puce

3

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



0

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.