Reputation: 9818
In JavaFX, if I have a scene with 2 VBox
elements and each VBox
has multiple Label
in it.
If I set the top VBox
to invisible, why does the bottom VBox
not move up the scene where the top VBox
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.
Upvotes: 104
Views: 90214
Reputation: 11134
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());
Upvotes: 203
Reputation: 219
Try to use setVisible and managedProperty together. Here is an example:
myHBox.setVisible(false);
myHBox.managedProperty().bind(myHBox.visibleProperty());
Upvotes: 5
Reputation: 1
If l want to hide and unhide a node, I resize the node to 0 if l want to hide it. That way, the node will not occupy space since is not visible to the user, so when l want it to be visible, l adjust the size again for it to be visible.
Upvotes: -1
Reputation: 341
Instead of hiding the vbox you should remove it from the Children and if you want to show it again add the vbox again.
Upvotes: 3
Reputation: 2029
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.
Upvotes: 7