gpt4 book ai didi

javafx - 从节点获取 Controller 实例

转载 作者:行者123 更新时间:2023-12-03 18:50:45 24 4
gpt4 key购买 nike

有可能从 Node 获取 Controller 实例吗??例如选项卡上的 AnchorPane ?

我有一些 AnchorPanes 加载不同的 Controller ,我想验证哪个 Controller 已经加载

最佳答案

Node默认情况下,.s 不包含有关与用于创建它的 fxml 文件一起使用的 Controller 的任何信息,因为 fxml 只是创建场景的一种方式。但是,您可以将这样的信息附加到 userData/properties在 fxml 中:

<AnchorPane xmlns:fx="http://javafx.com/fxml/1" fx:id="AnchorPane" prefHeight="400.0" prefWidth="600.0" onMouseClicked="#click" fx:controller="fxml.FXMLController">
<!-- store controller as userData property -->
<userData>
<fx:reference source="controller" />
</userData>
<properties>
<!-- store controller at key "foo" in properties map -->
<foo><fx:reference source="controller" /></foo>
</properties>
</AnchorPane>

如果你这样做,你可以在你添加此类信息的节点的最近祖先处查找 Controller
public static Object getController(Node node) {
Object controller = null;
do {
controller = node.getProperties().get("foo");
node = node.getParent();
} while (controller == null && node != null);
return controller;
}

properties 中检索信息映射或使用
public static Object getController(Node node) {
Object controller = null;
do {
controller = node.getUserData();
node = node.getParent();
} while (controller == null && node != null);
return controller;
}

userData 中检索信息属性(property)。

您可能应该只使用一种添加信息的方式,而不是同时使用两种方式。另外最好更换 foo作为关键...

关于javafx - 从节点获取 Controller 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40754454/

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