Wie lade ich Inhalte dynamisch auf JavaFX-Registerkarten?

Ich habe eine GUI, die mit JavaFX mit FXML erstellt wurde.

Diese GUI enthält viele Komponenten und nicht alle werden zu einem bestimmten Zeitpunkt benötigt.

Stellen Sie sich zum Beispiel eine grafische Benutzeroberfläche vor, die von ihrem Serverteil eine Liste von Städten empfängt. Jede Stadt wird auf einer eigenen Registerkarte beschrieben (und mit vielen Knoten beschrieben). Die Menge der Städte enthält 30 Elemente.

Wenn die GUI gestartet wird, fragt sie den Server nach einer Liste der Städte. Der Server gibt eine zufällige "Untergruppe" von Städten zurück (also Moskau + Riga + New York oder St. Petersburg + Tokio oder nur Amsterdam oder alle 30 Städte in einer Gruppe).

So. Ich muss nicht alle 30 Registerkarten in meinem Knotenbaum haben (ich nehme an, sie "essen" nur Speicher und nichts mehr).

Ich möchte die Anzahl der Registerkarten verwalten, die ich zu jedem Zeitpunkt auf meiner GUI habe.

Die erste einfache Lösung, die ich habe, ist die folgende:

Erstellen Sie eine FXML-Datei, die die Komponenten für alle Städte enthältEntfernen Sie während der Initialisierung in der Controller-Klasse nicht benötigte Registerkarten.

Es gibt Probleme, die ich mit dieser Lösung habe. Erstens weiß ich nicht, obtabPane.getTabs().remove(index) Entfernt die Registerkarte und ihren gesamten Inhalt wirklich aus dem Knotenbaum. Zweitens werden alle nicht benötigten Registerkarten initialisiert, bevor sie entfernt werden, sodass sie ohnehin Speicher und Ressourcen belegen, und meine GUI kann langsamer sein, als sie sein muss.

Die zweite Lösung, die ich habe, ist:

Mache viele FXMLs. Eine für alle Städte, eine für jede Stadt und eine für jede Kombination von Städten.

Aber es wird viele FXMLs geben, daher ist diese Lösung auch nicht nützlich.

Die Lösung, von der ich träume:

Erstellen Sie eine FXML-Datei für jede Stadt und eine für die Haupt-App mit Registerkarten.Laden Sie den Inhalt der FXML-Stadtdatei bei Bedarf dynamisch in eine Registerkarte.

Also, wenn jemand irgendwelche Ideen zu dieser Aufgabe hat oder die Lösung kennt, helfen Sie mir bitte dabei ...

Antworten auf die Frage(1)

Ihre Antwort auf die Frage