web-dev-qa-db-fra.com

JavaFX - setVisible ne "cache" pas l'élément

En JavaFX, si j'ai une scène avec 2 VBox éléments et que chaque VBox contient plusieurs Label.
Si je règle le haut VBox sur invisible, pourquoi le bas VBoxne monte-t-il pas la scène où top VBox était?

Le VBox est invisible mais je m'attendrais à ce que les autres objets se déplacent à sa place.

J'utilise FXML pour charger mes contrôles.

64
Gillardo

Node.setVisible(boolean) change simplement l'état de visibilité d'un Node.

Pour exclure un Node de ses calculs de mise en page parents, vous devez en outre définir son état géré en appelant Node.setManaged(false) .

Si vous souhaitez que l'état géré soit mis à jour automatiquement parallèlement à la visibilité, vous pouvez utiliser une liaison comme indiqué par @jewelsea: node.managedProperty().bind(node.visibleProperty());

128
eckig

Comme il est invisible, il ne se déplacera pas vers le haut. Vous devez l'enlever avec quelque chose comme:

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

Une fois que vous avez supprimé l'élément que vous souhaitez voir invisible, l'autre élément doit se déplacer vers le haut.

7
breaktop

Au lieu de cacher la vbox, vous devriez retirer dans les enfants et si vous voulez le montrer à nouveau ajouter à nouveau la vbox.

2
Juce