gpt4 book ai didi

java - FXMLLoader 找不到正在运行的 Controller 实例并创建新的 Controller 实例

转载 作者:行者123 更新时间:2023-11-30 07:23:13 25 4
gpt4 key购买 nike

我是 JavaFX 的新手,最近遇到了一个让我很困惑的问题。我正在使用一个名为“MainController”的类,它控制包含 TabPane 的 FXML 文件。每个选项卡都由另一个 Controller 控制。但有一种情况需要删除选项卡,因此我需要访问 MainController 实例以从 Pane 中删除当前 Activity 的选项卡。

每当我使用此代码获取当前正在运行的 MainController 的实例时,我都会得到一个全新的实例,其所有组件都设置为默认值。

代码是:

FXMLLoader loader = new FXMLLoader(getClass().getResource("Main.fxml"));
loader.load();
MainController controller = loader.getController();
controller.closeCurrentTab();

 

protected void closeCurrentTab() {
tabPane.getTabs().remove(tabPane.getSelectionModel().getSelectedIndex());
}

我目前正在使用 Controller 的静态引用来访问它,因为它是唯一适合我的解决方案。但我知道这是非常不专业的,我真的想避免这种情况。

我希望有人知道这里出了什么问题。

最佳答案

您应该确保在您想要使用主 Controller 时有一个引用。我猜它是“子” Controller 之一(很可能是当前选项卡的 Controller )。

因此,如果您在此类中拥有一个存储主 Controller 引用的属性,那么您的问题就可以解决。

我猜你从主 Controller 初始化这个“子” Controller ,例如:

FXMLLoader loader = new FXMLLoader(getClass().getResource("TabController1.fxml"));
loader.load();

所以你可以这样做:

TabController controller = loader.getController();
controller.mainControllerProperty.set(this);

其中 mainControllerPropertyTabController 中定义,如下所示:

ObjectProperty<MainController> mainControllerProperty = new SimpleObjectProperty();

关于java - FXMLLoader 找不到正在运行的 Controller 实例并创建新的 Controller 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37205187/

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