2012-08-24 49 views
0

我已經創建了一個tabPane。在每個選項卡,我已經包括()的FXML顯示實際會話的用戶,使用此代碼:如何從另一個控制器修改標籤(查找+更新)?

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

當我執行此,控制檯打印「布拉布拉」,但標籤的程序(GUI)沒有被修改

我有什麼做的,看到的值更新?

謝謝大家

+0

'@FXML private TopTabController topTabController;'您是如何將TopTabController與home-tab.fxml關聯的?發表它。或者在刪除@FXML後再次嘗試您的應用。 –

+0

@UlukBiy,我在這篇文章中關注了Greg Brown的答案:https://forums.oracle.com/forums/thread.jspa?messageID=10412389,他解釋說topTabController會自動創建並填充(如果我理解正確!)。 我已經更新了代碼以更加明確。感謝您的關注! –

回答

2

FXMLLoader已創建TopTabController在加載的家庭tab.fxml。它是場景中的渲染結果。但是,您正在創建/加載另一個未添加到任何場景的TopTabController實例。而你正在改變第二個標籤的文字。正確的做法是修改已加載的第一個實例,並且不加載另一個:

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

側面說明,你在註釋中提供的鏈接是有益的。

+0

你100%正確,謝謝@UlukBiy! –

相關問題