JavaFX标签赢得';t更新

JavaFX标签赢得';t更新,java,javafx,label,fxml,Java,Javafx,Label,Fxml,我正在努力学习Java和JavaFX,我遵循了这一点,一切都很顺利 现在我想让事情变得更复杂一点,并启动了一个密码簿应用程序 主fxml文件包含一个拆分窗格,其中一半是ListView,另一半是动态加载的,因此我可以将标签更改为textFields以编辑窗口中的记录 问题是,当我单击listView项时,它会加载.fxml文件,但不会更新标签。如果我添加一个监听器并记录更新,它会记录更新,就像它被更改了一样,但事实并非如此。这是更改标签的方法 public void showLoginDetai

我正在努力学习Java和JavaFX,我遵循了这一点,一切都很顺利

现在我想让事情变得更复杂一点,并启动了一个密码簿应用程序

主fxml文件包含一个拆分窗格,其中一半是ListView,另一半是动态加载的,因此我可以将标签更改为textFields以编辑窗口中的记录

问题是,当我单击listView项时,它会加载.fxml文件,但不会更新标签。如果我添加一个监听器并记录更新,它会记录更新,就像它被更改了一样,但事实并非如此。这是更改标签的方法

public void showLoginDetails(String username)
{
    usernameLabel.setText(username);
}
此方法在父控制器中调用

private void showLoginDetails(Login login)
{
    mainApp.showLayout("LoginOverview.fxml");

    mainApp.getLoginOverviewController().showLoginDetails(login.getName());;
}
我没有收到任何错误,但结果如下: 我确信在SceneBuilder中标签的名称设置正确

你需要看什么代码才能帮助我

编辑:

MainApp GetLoginVersionController()

MainApp.getController()

fxmlLoader

public void showLayout(String layout)
{
    try {
        FXMLLoader loader = new FXMLLoader();
        loader.setLocation(MainApp.class.getResource("view/" + layout));
        AnchorPane content = (AnchorPane) loader.load();
        listContainerController.setContent(content);
    } catch (IOException e)
    {
        e.printStackTrace();
    }
}
listContainerController.setContent()

这里是标签声明的地方

@FXML
private Label usernameLabel;
无法在initialize方法中访问label变量

编辑2

正如James_D所指出的,我必须从ShowLayout方法存储控制器

public void showLayout(String layout)
{
    try {
        FXMLLoader loader = new FXMLLoader();
        loader.setLocation(MainApp.class.getResource("view/" + layout));
        AnchorPane content = (AnchorPane) loader.load();
        listContainerController.setContent(content);
        this.activeController = loader.getController();
    } catch (IOException e)
    {
        e.printStackTrace();
    }
}
变量

private Object activeController;
吸气剂

public Object getActiveController()
{
    return activeController;
}
目前的代码是否正常?它可以工作,但我想学习如何编写可接受的代码


这就是我更新代码的方式

如果您确定
usernamelab
正确,您可以发布fxml loader和
GetLoginVersionController()的代码吗?此外,您确定
Login
包含数据吗?您能否显示更多的控制器代码,例如
usernamelab
声明的位置以及在
initialize()
方法中访问它的任何位置。@ItachiUchiha添加了您询问的代码看起来您创建了两个不同的FXML加载程序,一个用于在UI中实际显示FXML的内容,另一个用于获取控制器。这意味着您的控制器实例与连接到UI的控制器实例不同。您需要加载FXML一次并保留控制器实例。如果我正确理解您的代码,则可以。
public void showLayout(String layout)
{
    try {
        FXMLLoader loader = new FXMLLoader();
        loader.setLocation(MainApp.class.getResource("view/" + layout));
        AnchorPane content = (AnchorPane) loader.load();
        listContainerController.setContent(content);
        this.activeController = loader.getController();
    } catch (IOException e)
    {
        e.printStackTrace();
    }
}
private Object activeController;
public Object getActiveController()
{
    return activeController;
}