W JavaFX, jeśli mam scenę z 2 VBox
elementami i każdy z nich VBox
ma wiele Label
.
Jeśli ustawię górę VBox
jako niewidoczną , dlaczego dół VBox
nie przesuwa się w górę sceny, w której VBox
znajdowała się góra ?
VBox
Jest niewidoczny , ale spodziewałbym inne obiekty, aby przenieść się na swoim miejscu.
Używam FXML do ładowania moich formantów.
VBox
jest po prostu niewidoczna i nieremoved
pochodzi od rodzica.Odpowiedzi:
Node.setVisible(boolean)
po prostu przełącza stan widoczności plikuNode
.Aby wykluczyć a
Node
z obliczeń układu nadrzędnego, musisz dodatkowo ustawić stan zarządzany przez wywołanieNode.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());
źródło
node.managedProperty().bind(node.visibleProperty());
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ę.
źródło
Zamiast ukrywać vbox, powinieneś usunąć go z Children i jeśli chcesz go ponownie pokazać, dodaj ponownie vbox.
źródło
Spróbuj użyć razem setVisible i managedProperty. Oto przykład:
myHBox.setVisible(false); myHBox.managedProperty().bind(myHBox.visibleProperty());
źródło
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.
źródło