java - ventana - Pasar parámetros a un controlador al cargar un FXML
javafx ejemplos (1)
Esta pregunta ya tiene una respuesta aquí:
- Pasando Parámetros JavaFX FXML 10 respuestas
Tengo una pantalla de inicio de sesión, y quiero pasar el ID de inicio de sesión del controlador de inicio de sesión al controlador principal, para poder acceder a algunas funciones para cambiar la contraseña y todo eso.
Carga el controlador de esta manera:
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 está limitado a MainController.java. ¿Hay alguna manera de pasar el ID de usuario que necesito y acceder al método initialize () del controlador?
Después de cargar el controlador con FXMLLoader, es posible llamar a los miembros de dicho controlador antes de invocar el método show (). Uno debe obtener la referencia al controlador que se acaba de invocar y llamar a un método set () desde allí (o acceder al atributo directamente, si está definido públicamente).
Del ejemplo, supongamos que el controlador asociado con Main.fxml se llama MainController, y MainController tiene un atributo user_id, definido como un int. Su método de configuración es setUser (int usuario). Entonces, desde la clase 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;
}
MainController.java:
//You may need this also if you''re getting null
@FXML private void initialize() {
Platform.runLater(() -> {
//do stuff
});
}