簡體   English   中英

JavaFX從主類調用控制器方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM