我正在尝试学习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());;
}
我没有错误,但结果如下: 我确信在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;
}
代码是否正常?它有效,但我想学习如何编写可接受的代码。
这是我更新代码的方式