我一直在尝试FXMLLoader
并使用setControllerFactory
使用自定义方法Callback<P,R>
执行。
ORACLE 文档 http://docs.oracle.com/javafx/2/fxml_get_started/whats_new.htm#CHDDDDCC说如下:
实现可能会返回 null 值来表明它确实如此
没有或不能创建给定类型的控制器;在这种情况下,
默认控制器构造机制将被采用
装载机。
我想要实现的结果是我可以使用依赖注入框架来创建任何需要参数的控制器,但我会让FXMLLoader
加载任何不需要参数的控制器。
因此,如果我有以下简单的 FXML 文件,该文件使用ViewController
不接受参数的类...
<StackPane fx:id="pane"
xmlns:fx="http://javafx.com/fxml"
fx:controller="my.package.ViewController">
</StackPane>
我使用以下简单的控制器工厂实现来向FXMLLoader
在这种情况下我希望它能够管理控制器的构造......
loader.setControllerFactory(new Callback<Class<?>, Object>(){
@Override
public Object Call(Class<?> type) {
return null; // Let the FXMLLoader handle construction...
}
});
拨打电话后load()
方法我的Initialise方法在ViewController
类永远不会被调用(我已经用断点验证了这一点)。
如果我更改控制器工厂实现以返回一个实例ViewController
类然后一切都按预期进行。
谁能帮助我消除我的困惑?我使用的是Callback
接口不正确或者ORACLE文档不正确?