Ihre Controller-Datei ist eine Java-Quelldatei, die auf eine einzige Java-Klasse kompiliert wird, aus denen möglicherweise viele Java-Objekt-Instanzen erstellt werden.
Zur Laufzeit erstellt die standardmäßige fxml loader controller factory -Implementierung eine neue Controller-Instanz (d. H. Ein neues Objekt), wenn Sie den fxml loader load method aufrufen.
Auch wenn Sie die gleiche fxml Datei immer und immer wieder laden, wird der Lader eine neue Controller-Instanz jedes Mal erstellen, die jeweils mit einer eigenen internen Zustand unabhängig von allen anderen.
Und falls Sie verschiedene fxml laden alle von der gleichen Controller-Klasse gesichert Dateien - jedes Mal, wenn Sie eine beliebige fxml Datei, werden Sie eine neue Controller-Instanz erhalten. Um Daten zwischen Controllern Dependency Injection oder eine separate Initialisierungsmethode
Update noch weitere Frage auf Controller-Daten zu beantworten
teilen finden Sie unter:
Passing Parameters JavaFX FXML
Auch Verwendung von static class members können Sie Informationen teilen. Verwenden Sie keine statische in Kombination mit @FXML
, as that won't work.
Es gibt ein nettes Tutorial für mit mehreren fxml Dateien arbeiten, die Sie nützlich finden können:
Hinweis: Es ist technisch möglich, teilen Sie einen einzigen Controller unter mehreren FXML-Dateien
Wie bereits in den Kommentaren von Greg Brown aus: mit FXMLLoader#setController()
und FXMLLoader#setControllerFactory()
es möglich ist, eine größere Kontrolle über Controller Instanziierung auszuüben.
ich nicht stark den folgenden Ansatz empfehlen, die weiter in der zugehörigen Antwort auf erklärt:
Danke, jewelsea! Ich dachte, das könnte der Fall sein. Da es für jede geladene fxml-Datei eine neue Instanz des Controllers gibt, gibt es eine Möglichkeit, diese Instanzen dazu zu bringen, Informationen gemeinsam zu nutzen? Oder wenn ich mein Programm neu schreiben sollte, um verschiedene Controller für jede fxml-Datei zu verwenden, können Sie verschiedene Controller zum Austausch von Informationen bekommen? – Aaron
Antwort aktualisiert mit Lösung für die zusätzliche Frage. – jewelsea
Sie rocken, jewelsea! Ich werde mir die jetzt ansehen. Vielen vielen Dank!! – Aaron