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