gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 22:12:57 25 4
gpt4 key购买 nike

是否可以在一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com