加载FXML当将参数传递给控制器​​[重复](Passing parameters to a con

2019-07-18 08:08发布

这个问题已经在这里有一个答案:

  • 传递参数的JavaFX FXML 10回答

我有一个登录界面,我想从LoginController中的MainController通过登录ID,这样我就可以访问某些功能更改密码和诸如此类的东西。

我加载像这样的控制器:

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,并访问控制器的初始化()方法?

Answer 1:

与FXMLLoader加载控制器后,有可能被调用的显示()方法之前调用用于所述控制器的成员。 一个人必须获得基准只是调用控制器,并呼吁从那里set()方法(或直接访问属性,如果定义公共)。

从该示例中,我们假设与Main.fxml相关联,所述控制器被称为MainController,和MainController具有USER_ID属性,定义为int。 其设置方法是SETUSER(INT用户)。 所以,从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

    });

}


文章来源: Passing parameters to a controller when loading an FXML [duplicate]