0

私には2つの段階があります

Stage1とScene1および独自のController1

Stage2と別のScene2およびController2

Stage1から、ShowAndWaitを使用してStage2を呼び出します。
そして、HidingステージのStage2リスナーに設定します。

Stage2.Controller2から、呼び出しが非表示になり、ブレークポイントが設定されます

setOnHiding(new EventHandler<WindowEvent>() {
            @Override
            public void handle(WindowEvent t) {
                System.out.print(t.getSource());
            }
        });

次の場合に、このステージ間でパラメータを渡す方法:
1.stage1をstage2に渡す2.stage2の
結果、いくつかのデータ パラメータをstage1に渡す

4

1 に答える 1

1

これが私の解決策です。2つのクラスMyStageとMyControllerStage1があり、Stage2はMyStage Controller1を拡張する必要があり、Controller2はMyControllerを拡張する必要があります

Stage2 s2 = new MyStage(data);
s2.show();
result = s2.getResult();

class Stage2 extends Stage{
    private FXMLLoader fxmlLoader;
    private Object data;
    private Object result;

    public Stage(Object data){
        this.data = data;
        ...//do something with data
        getController().initWithData(data);
    }

    Object getResult(){
        return getController().getResult();
    }

    public MyController getController() {
        return (MyController) fxmlLoader.getController();
    }
}

Class MyController{
    public void initWithData(Object data){
    ...//
    }

    public Object getResult(){
    ...//
    return result;
    }

    public void setStage(Stage stage) {
            this.stage = stage;
}

    @FXML
    protected void close() {
            getStage().close();
    }

}

これは一般的ですが、fxmlとnon-fxmlを使用する場合、コードにいくつかの小さな変更があります。ステージ参照をコントローラーに渡して、別のコントローラーからステージを閉じることができます。私は今眠くなりすぎています。エラーがないことを願っています。後で更新します

于 2013-01-15T19:13:29.187 に答える