2013-01-15 81 views
0

之間越來越參數我有兩個階段JavaFX的傳球和舞臺

1階段與場景1和自己的控制器1

2階段與另一第二幕:和控制器2

從1階段我稱之爲2階段與ShowAndWait。
併爲隱藏舞臺的Stage2偵聽器設置。

從Stage2.Controller2調用隱藏在

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

breakpointed我怎麼能在這情況下,階段之間傳遞paramers:
1階段1傳遞給STAGE2
2.階段2導致一些數據來PARAMS stage1

+0

您是否試過這個:http://stackoverflow.com/questions/14370183/passing-parameters-to-a--controller-when-loading-an-fxml – andvicoso

回答

1

這是我的解決方案: 我有2類MyStage和myController的 1階段,2階段應擴大MyStage 控制器1,控制器2應擴大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 vs non-fxml。 您可以將階段引用傳遞給控制器​​以從另一個控制器關閉舞臺。 我現在太困了,希望沒有錯誤。 我會稍後更新

+0

我使用相同的,但我認爲也許存在Native解決方案 –