我想提前道歉,正如前面在“将参数直接从调用者传递给控制器”中讨论的那样,但是我遵循了发现的所有可能的解决方案,但仍然无法使它起作用。
我很难将参数从一个控制器传递到另一个控制器。
特别:
LoginController传递username给MainController。
当我单击登录按钮LoginController时,将其username设置为MainController。但是,加载Main.fxml时username为NULL。
在试图解决这个问题时,我想问一下:
initialize()方法?我想在LoginController调用的时候st.show();?username为NULL,因为我们已经使用Login在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();
}
...
}
Run Code Online (Sandbox Code Playgroud)
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);
...
}
...
}
Run Code Online (Sandbox Code Playgroud)
问题是您致电set的时间username。
在执行以下语句期间调用的initialize()方法:MainController
Region root = (Region) loader.load();
Run Code Online (Sandbox Code Playgroud)
此时,usernamein中的字段MainController为null,因此在欢迎消息中将其值报告为null。方法完成setUsername()后,您将呼叫MainController.initialize()。
通常,initialize()用FXML加载器加载的控制器类的方法永远不要尝试对FXML加载器未注入其值的实例字段执行任何操作。这些实例字段在initialize()调用该方法时尚未初始化。
| 归档时间: |
|
| 查看次数: |
8690 次 |
| 最近记录: |