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