JavaFX标签不会更新

时间:2015-04-08 17:43:02

标签: java javafx label fxml

我正在尝试学习Java和JavaFX,我跟着this tutorial,一切都很顺利。

现在我想让事情变得更复杂,并开始使用密码簿应用程序。

主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());;
}

我没有错误,但结果如下: Not working Labels 我确信在SceneBuilder中正确设置了标签的名称。

您需要哪些代码才能帮助我?

编辑:

MainApp getLoginOverViewController()

public LoginOverviewController getLoginOverviewController()
{
    if(loginOverviewController == null)
    {
        this.loginOverviewController = (LoginOverviewController) this.getController("LoginOverview.fxml");
        this.loginOverviewController.setMainApp(this);
    }
    return this.loginOverviewController;
}

MainApp.getController()

private Object getController(String layout)
{
    try {
        FXMLLoader loader = new FXMLLoader();
        loader.setLocation(MainApp.class.getResource("view/" + layout));
        loader.load();
        return loader.getController();

    } catch (IOException e)
    {

        e.printStackTrace();
        return null;
    }
}

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()

public void setContent(AnchorPane layout)
{
    content.getChildren().clear();
    content.getChildren().add(layout);
}

这是声明标签的地方

@FXML
private Label usernameLabel;

初始化方法中不访问label变量。

EDIT2

正如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;
}

代码是否正常?它有效,但我想学习如何编写可接受的代码。

这是我更新代码的方式

0 个答案:

没有答案