Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JavaFX - setVisible hides the element but doesn't rearrange adjacent nodes

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.

like image 752
Gillardo Avatar asked Feb 17 '15 09:02

Gillardo


4 Answers

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());

like image 122
eckig Avatar answered Nov 11 '22 12:11

eckig


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.

like image 23
breaktop Avatar answered Nov 11 '22 11:11

breaktop


Try to use setVisible and managedProperty together. Here is an example:

myHBox.setVisible(false);
myHBox.managedProperty().bind(myHBox.visibleProperty());
like image 5
Nicolescu Ionut Lucian Avatar answered Nov 11 '22 10:11

Nicolescu Ionut Lucian


Instead of hiding the vbox you should remove it from the Children and if you want to show it again add the vbox again.

like image 3
Juce Avatar answered Nov 11 '22 12:11

Juce