ventanas ventana varias usar una nueva instalar estructura ejemplos desde con como boton abrir java parameter-passing javafx-2

java - ventana - Pasar parámetros a un controlador al cargar un FXML



javafx ejemplos (1)

Esta pregunta ya tiene una respuesta aquí:

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 }); }