Fábrica de controladores personalizados JavaFX
He estado experimentando con elFXMLLoader
y usando elsetControllerFactory
método usando una costumbreCallback<P,R>
implementación.
La documentación de ORACLE Dice lo siguiente:
Una implementación puede devolver un valor nulo para indicar que no crea o no puede crear un controlador del tipo dado; en este caso, el mecanismo de construcción del controlador predeterminado será empleado por el cargador.
El resultado que quiero lograr es que puedo usar un marco de inyección de dependencias para crear cualquier controlador que requiera parámetros, pero dejaré queFXMLLoader
Cargue cualquier controlador que no requiera parámetros.
Así que si tengo el siguiente archivo FXML simple que utiliza elViewController
clase que no acepta parametros ...
<StackPane fx:id="pane"
xmlns:fx="http://javafx.com/fxml"
fx:controller="my.package.ViewController">
</StackPane>
y utilizo la siguiente implementación de fábrica del controlador simple para señalar alFXMLLoader
que quiero que gestione la construcción del controlador en este caso ...
loader.setControllerFactory(new Callback<Class<?>, Object>(){
@Override
public Object Call(Class<?> type) {
return null; // Let the FXMLLoader handle construction...
}
});
después de llamar alload()
Método de mi método de Inicializar en elViewController
La clase nunca se llama (he verificado esto con un punto de interrupción).
Si cambio la implementación de mi controlador de fábrica para devolver una instancia deViewController
clase entonces todo funciona como se espera.
¿Alguien puede ayudarme a aclarar mi confusión? Estoy usando elCallback
¿Interfaz incorrecta o la documentación de ORACLE es incorrecta?