Передача параметров контроллеру при загрузке FXML

У меня есть экран входа в систему, и я хочу передать идентификатор входа из 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. Есть ли способ, которым я могу передать идентификатор пользователя, который мне нужен, и получить к нему доступ к методу initialize() контроллера?

Ответ 1

После загрузки контроллера с помощью FXMLLoader можно вызвать участников указанного контроллера до вызова метода show(). Нужно получить ссылку на только что вызванный контроллер и вызвать метод set() оттуда (или получить доступ к атрибуту напрямую, если он определен публично).

В примере предположим, что контроллер, связанный с 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.<MainController>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;
}