Ich habe eine Klasse, die eine Schnittstelle implementiert. Aus meiner Basisklasse, ich bin eine Instanz der implementierten Klasse wie folgt:(JavaFX) Wie Methode der Klasse zwischen Konstruktor und initialize() aufrufen?
Class newTab;
TransactionTabInterface tabInterface = null;
try {
newTab = Class.forName("[package] + title);
tabInterface = (TransactionTabInterface) newTab.newInstance();
tabInterface.setRootController(this);
} catch (Exception e) {
e.printStackTrace();
}
Dies ist notwendig, da ich den Namen der Klasse weiß ich nicht (an anderer Stelle title
bestimmt) instanziiert muß.
Das Problem, das ich habe, ist, dass ich innerhalb der neuen Klasse sofort auf rootController
zugreifen muss. Ich habe eine Methode innerhalb der Klasse, die es mir erlaubt, die rootController
Referenz zu übergeben, wie in meinem obigen Code gesehen.
Normalerweise würde ich rootController
an den Konstruktor übergeben, wenn die Klasse instanziiert, aber ich weiß nicht, wie Sie einen Parameter an den Konstruktor im obigen Aufruf newInstance()
übergeben.
Bearbeiten: Um klar zu sein, ist der Code oben in meiner Hauptklasse, verwendet, um einen neuen FXML-Controller (NewTab) instanziieren.
Die richtige Antwort ist, den entsprechenden Konstruktor durch Reflexion aufzurufen (wie in P.J.Meischs Antwort unten). Wenn man jedoch annimmt, dass es sich um einen Controller handelt, der einer FXML-Datei zugeordnet ist, wird die Methode 'initialize()' erst aufgerufen, wenn 'FXMLLoader.load()' aufgerufen wird. Der obige Code erreicht also das Ziel, den Root zu setzen Controller "zwischen dem Konstruktor und initialisieren()". –
@James_D Der Code, den ich gepostet habe, ist NICHT wirklich Teil des FXML-Controllers. Mein FXML wird von dem Controller geladen, der die Methode 'setRootController' enthält. – Zephyr
Ich meinte, dass der Controller, den Sie instanziieren, der Controller für eine FXML-Datei war, aber ich nahm an, dass Sie die FXML später geladen haben (nicht im Konstruktor des Controllers). Sie könnten immer die FXML in der 'setRootController' Methode als Workaround/Hack laden, aber die richtige Antwort ist unten. –