JavaFX在Stage之间传递和获取参数

时间:2013-01-15 08:15:05

标签: javafx javafx-2 parameter-passing

我有两个阶段

Stage1 with Scene1和自己的Controller1

Stage2与另一个Scene2和Controller2

从Stage1开始,我用ShowAndWait调用Stage2 并为Stage2监听器设置隐藏阶段。

从Stage2.Controller2中调用hide和breakpointed

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

在以下情况下,如何在这些阶段之间传递参数:
1. stage1传递到stage2
2. stage2结果一些数据参数到stage1

1 个答案:

答案 0 :(得分: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时代码有一些细微的变化。 您可以将阶段引用传递给控制器​​以从另一个控制器关闭该阶段。 我现在太困了,希望没有错误。 我稍后会更新