JavaFX - setVisible ukrywa element, ale nie zmienia kolejności sąsiednich węzłów

86

W JavaFX, jeśli mam scenę z 2 VBoxelementami i każdy z nich VBoxma wiele Label.
Jeśli ustawię górę VBoxjako niewidoczną , dlaczego dół VBox nie przesuwa się w górę sceny, w której VBoxznajdowała się góra ?

VBoxJest niewidoczny , ale spodziewałbym inne obiekty, aby przenieść się na swoim miejscu.

Używam FXML do ładowania moich formantów.

Gillardo
źródło
2
Ponieważ pierwsza VBoxjest po prostu niewidoczna i nie removedpochodzi od rodzica.
ItachiUchiha
1
to, czy ukryte węzły zajmują jakąkolwiek przestrzeń, zazwyczaj zależy od układu
kleopatra

Odpowiedzi:

168

Node.setVisible(boolean)po prostu przełącza stan widoczności pliku Node.

Aby wykluczyć a Nodez obliczeń układu nadrzędnego, musisz dodatkowo ustawić stan zarządzany przez wywołanie Node.setManaged(false).

Jeśli chcesz, aby zarządzany stan był aktualizowany automatycznie wraz z widocznością, możesz użyć wiązania, jak wskazał @jewelsea: node.managedProperty().bind(node.visibleProperty());

eckig
źródło
50
Wiążący również prace , na przykładnode.managedProperty().bind(node.visibleProperty());
jewelsea
7

Ponieważ jest niewidoczny, nie przesunie się na górę. Musisz go usunąć za pomocą czegoś takiego:

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

Po usunięciu elementu, który chcesz ukryć, drugi element powinien przesunąć się na górę.

breaktop
źródło
3
AFAIK, manipulowanie wykresem sceny jest droższe niż ustawienie widoczne na fałsz.
Puce
3

Zamiast ukrywać vbox, powinieneś usunąć go z Children i jeśli chcesz go ponownie pokazać, dodaj ponownie vbox.

Juce
źródło
1

Spróbuj użyć razem setVisible i managedProperty. Oto przykład:

myHBox.setVisible(false);
myHBox.managedProperty().bind(myHBox.visibleProperty());
Nicolescu Ionut Lucian
źródło
1
nic nowego w porównaniu z odpowiedzią, która otrzymała najwięcej głosów pozytywnych, jest :)
kleopatra
0

Jeśli chcę ukryć i odkryć węzeł, zmieniam rozmiar węzła na 0, jeśli chcę go ukryć. W ten sposób węzeł nie będzie zajmował miejsca, ponieważ nie jest widoczny dla użytkownika, więc jeśli chcę, aby był widoczny, ponownie dostosuj rozmiar, aby był widoczny.

Evaboy
źródło