【发布时间】:2016-10-11 19:55:39
【问题描述】:
我的 JavaFX 应用程序有一点问题,我想从主类调用控制器中的方法,但它不起作用。
我试过这个Accessing FXML controller class 还有这个How 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();
}
}
有没有办法调用那里的方法?
【问题讨论】:
-
天哪,谢谢,这太简单了.. 第二个窗口在 AppController 中被调用,现在我给 hin "this" 并获取参考。