javafx-2 - FX :controller ="" in . FXML

标签 javafx-2 javafx fxml

是否可以在一个 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 ClientAreaUndecorator 都实现一个接口(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/

相关文章:

svg - 在 JavaFX 上的按钮中加载 SVG 文件

java - 如何生成构建器类

javafx-2 - JavaFX 2.1 : Toolkit not initialized

3d - 如何在 JavaFX 8 中从 STL 创建 3D 形状?

eclipse - 在 Docker 容器中的 Eclipse 中运行 JavaFX GUI 应用程序时出现 fatal error

java - 卡在 javafx 程序上,该程序不会将可注入(inject)字段加载到 FXML 文档中

java - 如何从 fxml 文件中的 xml 文件读取值?

java,从多个图像合成图像

javafx - 在 Gluon 应用程序中设置方向

单击第二个按钮时 JavaFX 场景卡住