26

ログイン画面があり、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を渡して、コントローラーのinitialize()メソッドでアクセスする方法はありますか?

4

1 に答える 1

49

FXMLLoader でコントローラーをロードした後、show() メソッドが呼び出される前に、そのコントローラーのメンバーを呼び出すことができます。呼び出したコントローラーへの参照を取得し、そこから set() メソッドを呼び出す必要があります (パブリックに定義されている場合は、属性に直接アクセスします)。

この例から、Main.fxml に関連付けられたコントローラーが MainController と呼ばれ、MainController には int として定義された userId 属性があると仮定します。その set メソッドは setUser(int user) です。したがって、LoginController クラスから:

LoginController.java:

// User ID acquired from a textbox called txtUserId
int userId = Integer.parseInt(this.txtUserId.getText());

FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("fxml/Main.fxml"));     

Parent root = (Parent)fxmlLoader.load();          
MainController controller = fxmlLoader.<MainController>getController();
controller.setUser(userId);
Scene scene = new Scene(root); 

stage.setScene(scene);    

stage.show();   

MainController.java:

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

MainController.java:

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

        //do stuff

    });
        
}
于 2013-01-21T04:31:25.413 に答える