Ich bin ein Neuling, wenn es um JavaFX geht und ich bin kürzlich auf ein Problem gestoßen, das mich wirklich verwirrt. Ich benutze eine Klasse namens "MainController", die eine FXML-Datei steuert, die ein TabPane enthält. Jede Registerkarte wird von einem anderen Controller gesteuert. Aber es gibt eine Situation, in der eine Registerkarte gelöscht werden muss, also brauche ich Zugriff auf die MainController-Instanz, um die aktuell aktive Registerkarte aus dem Fenster zu entfernen.FXMLLoader kann keine laufende Controller-Instanz finden und erstellt eine neue
Immer wenn ich diesen Code verwende, um eine Instanz des aktuell laufenden MainControllers zu erhalten, erhalte ich stattdessen eine komplett neue Instanz, bei der alle Komponenten auf ihre Standardwerte gesetzt sind.
Der Code ist:
FXMLLoader loader = new FXMLLoader(getClass().getResource("Main.fxml"));
loader.load();
MainController controller = loader.getController();
controller.closeCurrentTab();
protected void closeCurrentTab() {
tabPane.getTabs().remove(tabPane.getSelectionModel().getSelectedIndex());
}
Ich bin derzeit einen statischen Verweis auf den Controller für den Zugriff, da es die einzige Lösung ist, die für mich funktioniert. Aber ich weiß, dass das sehr unprofessionell ist und ich möchte das wirklich vermeiden.
Ich hoffe jemand weiß, was hier falsch ist.
Vielen Dank! Dies funktionierte wirklich gut für meine Tabs. Ich habe nur ein Problem, wenn ich dasselbe tun möchte, wenn ich ein neues Fenster erstelle. Der Versuch, auf den Controller zuzugreifen, führt immer zu einer nullPointerException. Ich füge eine neue Antwort hinzu, sobald ich den Fehler ein wenig besser verstehe. – Geta1992
Wenn die Antwort Ihr Problem behebt, können Sie es akzeptieren und ablehnen? Dies würde diese Frage schließen - dann können Sie eine weitere für ein anderes Problem erstellen. Das macht die Frage klar. Danke :) – DVarga
Das Problem ist, dass ich auf den Controller innerhalb der Initialize() -Methode zugreifen muss, aber es wird immer noch Null an diesem Punkt sein, da die Referenz erst danach hinzugefügt werden kann. EDIT: Gelöst, dass ich selbst. Vielen Dank ;) – Geta1992