JavaFX:在控制器之间传递数据总是空的
我想提前道歉,正如前面讨论的,但我遵循了我找到的所有可能的解决方案,但仍然无法让它工作 我很难将参数从一个控制器传递到另一个控制器 具体而言: LoginController将JavaFX:在控制器之间传递数据总是空的,javafx,Javafx,我想提前道歉,正如前面讨论的,但我遵循了我找到的所有可能的解决方案,但仍然无法让它工作 我很难将参数从一个控制器传递到另一个控制器 具体而言: LoginController将username传递给MainController 当我单击登录按钮时,LoginController将username设置为MainController。但是,加载Main.fxml时,username为空 在试图找出答案时,我想问: 调用MainControllerinitialize()方法时?我想在LoginCon
username
传递给MainController
当我单击登录按钮时,LoginController将username
设置为MainController。但是,加载Main.fxml时,username
为空
在试图找出答案时,我想问:
initialize()
方法时?我想在LoginController调用st.show()时代码>
username
为空,因为我们已经使用MainController.setUsername(username)
在LoginController中设置了它的值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();
}
...
}
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);
...
}
...
}
问题是您调用set
username
的时间
MainController
的initialize()
方法在执行以下语句期间调用:
Region root = (Region) loader.load();
此时,MainController
中的username
字段为空,因此其值在欢迎消息中报告为空。对setUsername()
的调用发生在MainController.initialize()
方法完成之后
通常,使用FXML加载程序加载的控制器类的
initialize()
方法不应尝试对FXML加载程序未注入值的实例字段执行任何操作。调用initialize()
方法时,这些实例字段尚未初始化。感谢您的回复。我能想出的唯一解决方案是创建一个新的用户类并在其中存储数据。但是,这对于只存储一个参数来说“太多了”。因此,对于这样的情况,使用静态字段代替?只需将setUsername(String usrName)
更改为调用lblWelcomeUser.setText(“欢迎,+usrName”)代码>@James\D这太明显了,我根本看不见!只要一个小小的改变,瞧!我已经试了一整天了。我真的很尴尬。非常感谢你们!如果此答案对您的问题有帮助,请将其作为已接受的答案进行检查。