如何以编程方式强制JavaFX应用程序关闭请求

 Yao2502880171 发布于 2023-01-07 09:46

javafx.stage.Window.setOnCloseRequest(EventHandler arg0)当我关闭我的应用程序时,我一直在使用运行一些代码.现在我想在我的代码中强制关闭请求,因此运行这个相同的算法.

我想stage.close(),Platform.exit()System.exit()无济于事; 他们都关闭了应用程序,但直接关闭.没有机器人按下,有没有顺利的方法做到这一点Alt + F4?(我也可以想象从算法中创建一个函数并调用它setOnCloseRequest()并在其他任何地方调用它).

1 个回答
  • 您可以从舞台获取事件处理程序并调用它.

    stage.getOnCloseRequest()
        .handle(
            new WindowEvent(
                stage,
                WindowEvent.WINDOW_CLOSE_REQUEST
            )
        )
    

    但是你想要做的不仅仅是调用你的自定义关闭请求处理函数,而是激活一个关闭请求事件,它将运行你的处理程序和窗口的任何其他关闭事件处理程序(所以,默认情况下它也会关闭窗口).

    stage.fireEvent(
        new WindowEvent(
            stage,
            WindowEvent.WINDOW_CLOSE_REQUEST
        )
    )
    

    示例应用程序

    运行下面的示例(Java 8)以查看两种方法的行为之间的差异:

    import javafx.application.Application;
    import javafx.scene.Scene;
    import javafx.scene.control.Button;
    import javafx.scene.layout.VBox;
    import javafx.stage.Stage;
    import javafx.stage.WindowEvent;
    
    public class CloseMonitor extends Application {
        @Override
        public void start(Stage stage) {
            stage.setOnCloseRequest(
                    event -> System.out.println("Close Requested")
            );
    
            Button handleClose = new Button("Handle Close Request");
            handleClose.setOnAction(
                    event -> stage.getOnCloseRequest()
                            .handle(
                                    new WindowEvent(
                                            stage,
                                            WindowEvent.WINDOW_CLOSE_REQUEST
                                    )
                            )
            );
            handleClose.setMaxWidth(Double.MAX_VALUE);
    
            Button fireClose = new Button("Fire Close Request");
            fireClose.setOnAction(
                    event -> stage.fireEvent(
                            new WindowEvent(
                                    stage,
                                    WindowEvent.WINDOW_CLOSE_REQUEST
                            )
                    )
            );
            fireClose.setMaxWidth(Double.MAX_VALUE);
    
            stage.setScene(
                    new Scene(
                            new VBox(
                                    10,
                                    handleClose,
                                    fireClose    
                            )
                    )
            );
            stage.show();
            stage.sizeToScene();
        }
    
        public static void main(String[] args) {
            launch(args);
        }
    }
    

    2023-01-07 09:49 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有