Benutzerdefinierte JavaFX-Controller-Factory
Ich habe mit dem experimentiertFXMLLoader
und mit dersetControllerFactory
Methode mit einem benutzerdefiniertenCallback<P,R>
Implementierung.
Die ORACLE-Dokumentation sagt folgendes:
Eine Implementierung gibt möglicherweise einen Nullwert zurück, um anzuzeigen, dass sie keinen Controller des angegebenen Typs erstellt oder nicht erstellen kann. In diesem Fall wird der Standard-Controller-Konstruktionsmechanismus vom Lader verwendet.
Das Ergebnis, das ich erreichen möchte, ist, dass ich ein Abhängigkeitsinjektionsframework verwenden kann, um alle Controller zu erstellen, die Parameter erfordern, aber ich werde das zulassenFXMLLoader
Laden Sie alle Controller, die keine Parameter benötigen.
Also, wenn ich die folgende einfache FXML-Datei habe, die die verwendetViewController
Klasse, die keine Parameter akzeptiert ...
<StackPane fx:id="pane"
xmlns:fx="http://javafx.com/fxml"
fx:controller="my.package.ViewController">
</StackPane>
und ich benutze die folgende einfache Controller-Factory-Implementierung, um dem zu signalisierenFXMLLoader
dass ich es in diesem Fall den Aufbau des Controllers verwalten möchte ...
loader.setControllerFactory(new Callback<Class<?>, Object>(){
@Override
public Object Call(Class<?> type) {
return null; // Let the FXMLLoader handle construction...
}
});
nach dem anruf derload()
method meine Initialisierungsmethode in derViewController
Klasse wird nie aufgerufen (ich habe dies mit einem Haltepunkt überprüft).
Wenn ich meine Controller-Factory-Implementierung ändere, um eine Instanz von zurückzugebenViewController
klasse dann klappt alles wie erwartet.
Kann mir jemand helfen, meine Verwirrung zu beseitigen? Benutze ich dieCallback
Schnittstelle falsch oder ist die ORACLE-Dokumentation falsch?