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 VBox
ne 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.
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());
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.
Au lieu de cacher la vbox, vous devriez retirer dans les enfants et si vous voulez le montrer à nouveau ajouter à nouveau la vbox.