0

我创建了一个 tabPane。在每个选项卡下,我都包含 () 一个 fxml 来显示实际的会话用户,代码如下:

home-tab.fxml 有这一行:

<fx:include fx:id="topTab" source="../top-tab.fxml"/>

顶部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)

我必须做什么才能看到更新的值?

谢谢你们

4

1 回答 1

2

FXMLLoader加载 home-tab.fxml 时已经创建了 TopTabController。它是场景中的渲染。但是,您正在创建/加载另一个未添加到任何场景的 TopTabController 实例。您正在更改第二个标签中的文本。正确的方法是修改已经加载的第一个实例而不是加载另一个:

@Override
public void initialize(URL url, ResourceBundle rb) {
    topTabController.sessionLabel.setText("Real blabla");
    System.out.println("sessionLabel= " + topTabController.sessionLabel.getText());
}

旁注,您在评论中提供的链接很有用。

于 2012-08-24T12:47:52.783 回答