您不能在一个 FXML 文件中使用 设置多个控制器 (fx:controller="")
,而是考虑手动注入控制器,基本上有两种方法:
使用setController方法而不提及 FXML 文件中的控制器:
FXMLLoader loader = new FXMLLoader();
URL location = getClass().getClassLoader().getResource("fxml/ClientArea.fxml");
loader.setLocation(location);
loader.setController(new ClientArea());
// loader.setController(new Undecorator());
loader.load();
更合适的是,使用setControllerFactory方法:
首先,确保两个控制器都ClientArea
实现了文件中提到Undecorator
的接口(包含事件处理程序方法) ,然后在从文件中加载视图时选择控制器:Icontroller
FXML
(fx:controller="IController")
FXML
FXMLLoader loader= new FXMLLoader();
URL location = getClass().getClassLoader().getResource("fxml/ClientArea.fxml");
loader.setLocation(location);
loader.setControllerFactory(new Callback<Class<?>, Object>() {
public Object call(Class<?> p) {
return new ClientArea();
// return new Undecorator();
}
});
loader.load();