2016-06-10 25 views
0

我的JavaFX應用程序有一點問題,我想從主類調用控制器中的方法,但它不起作用。JavaFX調用主類中的控制器方法

我想這Accessing FXML controller classHow do I access a UI element from another controller class in JavaFX?

但它不工作。

所以,在我的應用程序有一個主窗口,並從那裏我可以打開第二個窗口,當我關閉第二窗口,我想打電話給主控制器的方法用於更新一些元素..

我的主類有這兩個窗口:

@Override 
public void start(Stage primaryStage) throws IOException { 
    this.primaryStage = primaryStage; 
    mainWindow(); 

public void mainWindow() { 
    try { 
     FXMLLoader loader = new FXMLLoader(MainApp.class.getResource("/App.fxml")); 
     Parent root = loader.load(); 
     AppController appController = loader.getController(); 
     appController.setMain(this); 
     Scene scene = new Scene(root); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

public void secondWindow() throws IOException { 
    try { 
     FXMLLoader loader = new FXMLLoader(getClass().getResource("SecondWindow.fxml")); 
     Parent root = loader.load(); 
     Stage stage = new Stage(); 
     SecondWindowController secondWindowController = loader.getController(); 
     secondWindowController.setStage(stage); 
     stage.initOwner(primaryStage); 
     stage.initModality(Modality.WINDOW_MODAL); 
     stage.setScene(new Scene(root)); 
     stage.show(); 
     stage.setOnCloseRequest(event -> { 
      event.consume(); 
      Alert alert = new Alert(Alert.AlertType.CONFIRMATION); 
      alert.setHeaderText("close?"); 
      alert.initOwner(stage); 
      Optional<ButtonType> result = alert.showAndWait(); 
      if (result.get() == ButtonType.OK){ 

      // Here I want to call the method to update in the AppController 

       stage.close(); 
      } 
     }); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

有沒有辦法在那裏調用該方法?

+0

哦,謝謝你,這是很容易的。第二個窗口被稱爲在AppController中,現在我給欣「這個「並獲得參考。 – Dusius

回答

3

您的secondWindow()方法永遠不會被調用。

當您調用它時,只需將引用傳遞給已經從FXML通過AppController appController = loader.getController();檢索到的appController,即可將該引用傳遞給創建新窗口的方法。

更改簽名:

secondWindow() 

到:

secondWindow(final AppController appController) 
相關問題