JavaFX - setVisible hides the element but doesn't rearrange adjacent nodes
Solution 1
Node.setVisible(boolean)
just toggles the visibility state of a Node
.
To exclude a Node
from its parents layout calculations you additionally have to set its managed state, by calling Node.setManaged(false)
.
If you want the managed state to be updated automatically alongside the visibility, you can use a binding as @jewelsea pointed out: node.managedProperty().bind(node.visibleProperty());
Solution 2
Since it's invisible, it wont move to the top. You have to remove it with something like:
// remove
vbox.getChildren().remove(...)
Once you've removed the element you want invisible then, the other element should move to the top.
Solution 3
Try to use setVisible and managedProperty together. Here is an example:
myHBox.setVisible(false);
myHBox.managedProperty().bind(myHBox.visibleProperty());
Solution 4
Instead of hiding the vbox you should remove it from the Children and if you want to show it again add the vbox again.
Gillardo
Updated on January 06, 2021Comments
-
Gillardo over 3 years
In JavaFX, if I have a scene with 2
VBox
elements and eachVBox
has multipleLabel
in it.
If I set the topVBox
to invisible, why does the bottomVBox
not move up the scene where the topVBox
was ?The
VBox
is invisible but I would expect the other objects to move into its place.I am using FXML to load my controls.