In JavaFX, wenn ich eine Szene mit 2 VBox
Elementen habe und jedes VBox
mehrere enthält Label
.
Wenn ich die Oberseite VBox
auf unsichtbar setze , warum VBox
bewegt sich die Unterseite nicht in der Szene nach oben, in der sich die Oberseite VBox
befand?
Das VBox
ist unsichtbar, aber ich würde erwarten, dass sich die anderen Objekte an ihren Platz bewegen.
Ich verwende FXML, um meine Steuerelemente zu laden.
VBox
nur unsichtbar ist und nichtremoved
von seinem Elternteil.Antworten:
Node.setVisible(boolean)
schaltet einfach den Sichtbarkeitsstatus von a umNode
.Um a
Node
von den übergeordneten Layoutberechnungen auszuschließen , müssen Sie zusätzlich den verwalteten Status durch Aufrufen festlegenNode.setManaged(false)
.Wenn Sie möchten, dass der verwaltete Status neben der Sichtbarkeit automatisch aktualisiert wird, können Sie eine Bindung verwenden, wie in @jewelsea ausgeführt:
node.managedProperty().bind(node.visibleProperty());
quelle
node.managedProperty().bind(node.visibleProperty());
Da es unsichtbar ist, bewegt es sich nicht nach oben. Sie müssen es mit etwas wie entfernen:
// remove vbox.getChildren().remove(...)
Sobald Sie das Element entfernt haben, das Sie unsichtbar machen möchten, sollte das andere Element nach oben verschoben werden.
quelle
Anstatt die vbox auszublenden, sollten Sie sie aus den untergeordneten Elementen entfernen und die vbox erneut hinzufügen, wenn Sie sie erneut anzeigen möchten.
quelle
Versuchen Sie, setVisible und manageProperty zusammen zu verwenden. Hier ist ein Beispiel:
myHBox.setVisible(false); myHBox.managedProperty().bind(myHBox.visibleProperty());
quelle
Wenn ich einen Knoten ein- und ausblenden möchte, ändere ich die Größe des Knotens auf 0, wenn ich ihn ausblenden möchte. Auf diese Weise belegt der Knoten keinen Platz, da er für den Benutzer nicht sichtbar ist. Wenn ich also möchte, dass er sichtbar ist, passe ich die Größe erneut an, damit er sichtbar ist.
quelle