2015-07-11 86 views
3

我想事先致歉,因爲這在前面討論過"Passing Parameters Directly From the Caller to the Controller",但是我遵循了我找到的所有可能的解決方案,但仍然無法實現。JavaFX:在控制器之間傳遞數據始終爲空

我很難將參數從一個控制器傳遞到另一個控制器。

具體來說:

的LoginController傳遞usernameMainController

當我點擊登錄按鈕的LoginController設置usernameMainController。但是,當Main.fxml被加載時username爲NULL。

至於試圖弄明白,我想問一下:

  1. MainControllerinitialize()方法被調用?我想在時間LoginController調用st.show();
  2. 如果前面是正確的,那麼爲什麼MainControllerusername是空的,因爲我們已經在將其值設置的LoginController使用mainController.setUsername(username)

任何幫助,將不勝感激。

這是我的代碼。

LoginController.java

public class LoginController implements Initializable { 
    ... 
    @FXML TextField username; 

    @FXML public void actionLoginButton() { 
     ... 
     Stage st = new Stage(); 
     FXMLLoader loader = new FXMLLoader(getClass().getResource("Main.fxml")); 
     Region root = (Region) loader.load(); 

     Scene scene = new Scene(root); 
     st.setScene(scene); 

     MainController mainController = loader.<MainController>getController(); 
     mainController.setUsername(username.getText()); 

     st.show(); 
    } 
    ... 
} 

MainController.java

public class MainController implements Initializable { 
    ... 
    String username; 

    @FXML Label lblWelcomeUser; 

    public void setUsername(String usrname) { 
     this.username = usrname; 
    } 

    @Override 
    public void initialize(URL url, ResourceBundle rb) { 
     ...  
     lblWelcomeUser.setText("Welcome, " + this.username); 
     ... 
    } 
    ... 
} 

回答

1

的問題是,你的電話的設置username時機。

Region root = (Region) loader.load(); 

此時,在MainControllerusername字段爲空,因此它的價值被報告爲在歡迎空:

MainControllerinitialize()方法是在下列語句的執行被稱爲信息。在MainController.initialize()方法完成後,您撥打setUsername()

通常,使用FXML加載器加載的控制器類的initialize()方法不應該嘗試對其值未由FXML加載器注入的實例字段執行任何操作。這些實例字段在調用initialize()方法時不會被初始化。

+0

謝謝您的回覆。 我唯一能找出的解決方案是創建一個新的用戶類並在其中存儲數據。但是,這僅僅存儲一個參數「太多」了。 因此,像這樣的情況下使用靜態字段呢? –

+1

只需更改你的'setUsername(String usrName)'來調用'lblWelcomeUser.setText(「Welcome,」+ usrName);'。 –

+0

@James_D這太明顯了,我根本看不到它!只是一個小小的變化,瞧!我一整天都在嘗試這個。我真的很尷尬。十分感謝大家! –

相關問題