it-swarm.com.ru

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

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

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

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

62
Gillardo

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

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

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

121
eckig

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

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

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

7
breaktop

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

2
Juce