我想事先致歉,因爲這在前面討論過"Passing Parameters Directly From the Caller to the Controller",但是我遵循了我找到的所有可能的解決方案,但仍然無法實現。JavaFX:在控制器之間傳遞數據始終爲空
我很難將參數從一個控制器傳遞到另一個控制器。
具體來說:
的LoginController傳遞username
到MainController。
當我點擊登錄按鈕的LoginController設置username
到MainController。但是,當Main.fxml被加載時username
爲NULL。
至於試圖弄明白,我想問一下:
- 當MainController
initialize()
方法被調用?我想在時間LoginController調用st.show();
? - 如果前面是正確的,那麼爲什麼MainController
username
是空的,因爲我們已經在將其值設置的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);
...
}
...
}
謝謝您的回覆。 我唯一能找出的解決方案是創建一個新的用戶類並在其中存儲數據。但是,這僅僅存儲一個參數「太多」了。 因此,像這樣的情況下使用靜態字段呢? –
只需更改你的'setUsername(String usrName)'來調用'lblWelcomeUser.setText(「Welcome,」+ usrName);'。 –
@James_D這太明顯了,我根本看不到它!只是一個小小的變化,瞧!我一整天都在嘗試這個。我真的很尷尬。十分感謝大家! –