当前位置: 首页 > 知识库问答 >
问题:

如何在JavaFX中关闭控制器的新弹出窗口

安聪
2023-03-14

我有一个控制器。用于场景的java。fxml和控制器设置。用于WindowsSettings.fxml的java。在控制器中。java I使用以下方法创建一个新的弹出窗口(无对话框):

    @FXML
    public void handleSubmenuSettings(ActionEvent event) throws IOException {

        Stage stage; 
        Parent root;
        ControllerSettings controller;

        stage = new Stage();
        FXMLLoader loader = new FXMLLoader(getClass().getResource("WindowSettings.fxml"));
        root = (Parent) loader.load();
        controller = (ControllerSettings) loader.getController();
        stage.setScene(new Scene(root));

        stage.setTitle("Settings");
        stage.initModality(Modality.APPLICATION_MODAL);
        stage.setResizable(false);
        stage.initOwner(submenuSettings.getScene().getWindow());
        stage.showAndWait();

        stage.setOnCloseRequest(e -> {
            e.consume();
            controller.saveSettings();
            stage.close();
        });
    }

我想在关闭新弹出窗口时保存设置,但这不适用于stage.setOnCloseRequest。

共有1个答案

陈霄
2023-03-14

显示和Wait()方法将阻止执行,直到窗口关闭;即,在窗口关闭之前,后续语句将不会执行。因此,在窗口关闭之前,您不会为关闭请求注册侦听器。显然,在窗口关闭后不会出现关闭窗口的请求,因此永远不会调用您的处理程序。

无论如何,不太清楚为什么要使用关闭请求处理程序。大概您只是想在窗口关闭后调用controller.saveSettings()。因为您使用的是show And等待(),所以您可以这样做:

@FXML
public void handleSubmenuSettings(ActionEvent event) throws IOException {

    Stage stage; 
    Parent root;
    ControllerSettings controller;

    stage = new Stage();
    FXMLLoader loader = new FXMLLoader(getClass().getResource("WindowSettings.fxml"));
    root = (Parent) loader.load();
    controller = (ControllerSettings) loader.getController();
    stage.setScene(new Scene(root));

    stage.setTitle("Settings");
    stage.initModality(Modality.APPLICATION_MODAL);
    stage.setResizable(false);
    stage.initOwner(submenuSettings.getScene().getWindow());
    stage.showAndWait();

    controller.saveSettings();
}
 类似资料:
  • 所以我只是想知道是否有人知道在JavaFX 8中关闭弹出窗口的正确方法。例如,如果我的弹出窗口上有一个取消按钮,当按下取消按钮时,我应该使用什么方法来摆脱弹出窗口?我目前只是使用隐藏()方法。这让我有点害怕,因为我不确定弹出窗口是否在后台某处徘徊并且仍然需要关闭。但是,当我在这里查看java文档时,我没有看到任何关闭()方法,我也没有在我的IDE自动完成中看到关闭()方法。不过,我确实在文档中看到

  • 我正在为Facebook编写一个代码,它从属性文件中获取URL、ID、密码,但在登录时,我会被提示“Facebook想要显示通知-允许-阻止”,在登录后我该如何使其如此(a)按ESP或Alt+F4并关闭弹出窗口或(B)查找通知并自行关闭通知。这是我使用的,但它不起作用。感谢任何帮助。

  • 问题内容: 我想关闭弹出窗口(已知的窗口名称),然后返回到原始窗口。我该怎么办?如果我无法获得窗口中关闭按钮的常量。那么有没有达到目标的一般行为? 问题答案: 你有没有尝试过:

  • 问题内容: 我正在使用selenium webDriver为一个Web应用程序编写测试,并且遇到一种情况,当我尝试关闭浏览器时,我会弹出一个对话框:“确定吗?”页面要求您确认要离开- 输入的数据将迷路了。” 有2个按钮:“离开页面”和“停留在页面上” 如何单击这些按钮? 问题答案: 为我解决了这个问题

  • 我有这段代码显示了一个按钮谁显示一个弹出窗口,我希望用户能够关闭弹出窗口点击它的外部时,它是打开的。

  • 问题内容: 我通过window.open打开了一个弹出窗口。使用JavaScript打开,我想在关闭此弹出窗口时刷新父页面。(onclose事件?)我该怎么办? 问题答案: 您可以使用“ window.opener”访问父窗口,因此,在子窗口中编写如下内容: