是否可以在一个F
XML文件中添加两个控制器(fx:controller =“”)?
我可以设法只添加一个作为fx:controller =“”
看代码
<BorderPane id="BorderPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="596.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml" fx:controller="demoapp.ClientArea">
最佳答案 您不能使用(fx:controller =“”)在FXML文件中设置多个控制器,而是考虑手动注入控制器,基本上有两种方法:
使用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两个控制器都实现FXML文件中提到的接口(Icontroller,包含事件处理程序方法)(fx:controller =“IController”),然后在从FXML加载View时选择控制器文件:
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 Undeorator();
}
});
loader.load();