Fábrica de controlador personalizado JavaFX
Eu tenho experimentado com oFXMLLoader
e usando osetControllerFactory
método usando um costumeCallback<P,R>
implementação.
A documentação do ORACLE diz o seguinte:
Uma implementação pode retornar um valor nulo para indicar que não cria ou não pode criar um controlador do tipo fornecido; Neste caso, o mecanismo de construção do controlador padrão será empregado pelo carregador.
O resultado que quero alcançar é que posso usar uma estrutura de injeção de dependência para criar qualquer controlador que exija parâmetros, mas deixareiFXMLLoader
carregue quaisquer controladores que não necessitem de parâmetros.
Então, se eu tenho o seguinte arquivo FXML simples que usa oViewController
classe que não aceita parâmetros ...
<StackPane fx:id="pane"
xmlns:fx="http://javafx.com/fxml"
fx:controller="my.package.ViewController">
</StackPane>
e eu uso a seguinte implementação de fábrica de controlador simples para sinalizar aoFXMLLoader
que eu quero gerenciar a construção do controlador neste caso ...
loader.setControllerFactory(new Callback<Class<?>, Object>(){
@Override
public Object Call(Class<?> type) {
return null; // Let the FXMLLoader handle construction...
}
});
depois de chamar oload()
método meu método Initialise noViewController
A classe nunca é chamada (verifiquei isso com um ponto de interrupção).
Se eu alterar a implementação do meu controlador de fábrica para retornar uma instância doViewController
classe então tudo funciona como esperado.
Alguém pode me ajudar a esclarecer minha confusão? Eu estou usando oCallback
interface incorretamente ou a documentação do ORACLE está incorreta?