加载FXML时将参数传递给控制器​​

我有一个登录屏幕,我想将登录ID从LoginController传递给MainController,所以我可以访问一些函数来更改密码等等。

我像这样加载控制器:

FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("fxml/Main.fxml")); Parent root = (Parent)fxmlLoader.load(); Scene scene = new Scene(root); stage.setScene(scene); stage.show(); 

Main.fxml受限于MainController.java。 有没有办法可以传递我需要的用户ID,并在控制器的initialize()方法上访问它?

在使用FXMLLoader加载控制器之后,可以在调用show()方法之前调用所述控制器的成员。 必须获得刚刚调用的控制器的引用,并从那里调用set()方法(或直接访问属性,如果定义为public)。

从示例中,假设与Main.fxml关联的控制器称为MainController,MainController具有user_id属性,定义为int。 它的set方法是setUser(int user)。 所以,从LoginController类:

LoginController.java:

 // User ID acquired from a textbox called txt_user_id int user_id = Integer.parseInt(this.txt_user_id.getText()); FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("fxml/Main.fxml")); Parent root = (Parent)fxmlLoader.load(); MainController controller = fxmlLoader.getController(); controller.setUser(user_id); Scene scene = new Scene(root); stage.setScene(scene); stage.show(); 

MainController.java:

 public void setUser(int user_id){ this.user_id = user_id; } 

MainController.java:

 //You may need this also if you're getting null @FXML private void initialize() { Platform.runLater(() -> { //do stuff }); }