2016-06-10 110 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) 
相关问题