[英]JavaFX call a controller method from the main class
我的JavaFX應用程序有點問題,我想從主類中調用控制器中的方法,但它不起作用。
我嘗試了這個Accessing FXML控制器類,以及如何從JavaFX中的另一個控制器類訪問UI元素?
但它不起作用。
所以,在我的應用程序中,我有一個主窗口,從那里我可以打開第二個窗口,當我關閉第二個窗口時,我想在主控制器中調用一個方法來更新一些元素。
我的主要課程有這兩個Windows:
@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();
}
}
有沒有辦法在那里調用方法?
永遠不會調用你的secondWindow()
方法。
當你調用它時,只需將引用傳遞給appController,你已經通過AppController appController = loader.getController();
從FXML中檢索到了它AppController appController = loader.getController();
,到創建新窗口的方法。
更改簽名:
secondWindow()
至:
secondWindow(final AppController appController)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.