0

我有两个阶段

Stage1 与 Scene1 和自己的 Controller1

Stage2 与另一个 Scene2 和 Controller2

从 Stage1 我用 ShowAndWait 调用 Stage2。
并为隐藏阶段设置 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 和 MyController Stage1,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 与非 fxml 时,代码会有一些细微的变化。您可以将阶段引用传递给控制器​​以从另一个控制器关闭阶段。我现在太困了,希望没有错误。我稍后会更新

于 2013-01-15T19:13:29.187 回答