我创建了一个tabPane。在每个选项卡下,我已经包含()一个fxml来显示实际的会话用户,使用以下代码:
home-tab.fxml有这一行:
<fx:include fx:id="topTab" source="../top-tab.fxml"/>
top-tab.fxml:
<AnchorPane maxHeight="20.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml" fx:controller="wuendo.client.TopTabController">
<children>
<HBox id="hbox_top" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0">
<Label id="label_session" prefHeight="20.0" text="SESSION : " />
<Label fx:id="sessionLabel" prefHeight="20.0" text="" />
</HBox>
</children>
</AnchorPane>
TopTabController.java:
@FXML public Label sessionLabel;
HomeTabController.java:
@FXML private TopTabController topTabController;
@Override
public void initialize(URL url, ResourceBundle rb) {
URL location = getClass().getResource("../top-tab.fxml");
FXMLLoader fxmlLoader = new FXMLLoader(location);
AnchorPane root = null;
try {
root = (AnchorPane) fxmlLoader.load();
} catch (IOException ex) {
Logger.getLogger(HomeTabController.class.getName()).log(Level.SEVERE, null, ex);
}
topTabController = (TopTabController) fxmlLoader.getController();
Label txt = (Label) root.lookup("#sessionLabel");
txt.setText("blabla");
System.out.println("sessionLabel= " + topTabController.sessionLabel.getText());
}
执行此操作时,控制台会打印“blabla”,但程序中没有修改标签(gui)
如何更新价值,我该怎么做?
谢谢大家
答案 0 :(得分:2)
在加载home-tab.fxml时,FXMLLoader
已经创建了TopTabController。它是场景中渲染的一个。但是,您正在创建/加载TopTabController的另一个实例,该实例未添加到任何场景中。而您正在更改第二个标签的文本。正确的方法是修改已加载的第一个实例,而不是加载其他实例:
@Override
public void initialize(URL url, ResourceBundle rb) {
topTabController.sessionLabel.setText("Real blabla");
System.out.println("sessionLabel= " + topTabController.sessionLabel.getText());
}
旁注,您在评论中提供的链接很有用。