是否可以在一个 FXML 文件中添加两个 Controller (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 文件中设置多个 Controller ,而是考虑手动注入(inject) Controller ,基本上有两种方法:
使用setController方法,无需提及 FXML 文件中的 Controller :
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方法:
首先,确保 Controller ClientArea
和 Undecorator
都实现一个接口(interface)(Icontroller
,包含事件处理程序方法),其中提到FXML
文件 (fx:controller="IController")
,然后在从 FXML
文件加载 View 时选择 Controller :
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();
关于javafx-2 - FX :controller ="" in . FXML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15549307/