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

栏目: Java · 发布时间: 6年前

内容简介:翻译自:https://stackoverflow.com/questions/24483686/how-to-force-javafx-application-close-request-programmatically
我一直在使用javafx.stage.Window.setOnCloseRequest(EventHandler<WindowEvent> arg0)来关闭我的应用程序时运行一些代码.现在我想在我的代码中强制关闭请求,因此运行相同的算法.

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

您可以从舞台获取事件处理程序并调用它.

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);
    }
}

翻译自:https://stackoverflow.com/questions/24483686/how-to-force-javafx-application-close-request-programmatically


以上所述就是小编给大家介绍的《如何以编程方式强制JavaFX应用程序关闭请求》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Writing Windows VxDs and Device Drivers, Second Edition

Writing Windows VxDs and Device Drivers, Second Edition

Karen Hazzah / CMP / 1996-01-12 / USD 54.95

Software developer and author Karen Hazzah expands her original treatise on device drivers in the second edition of "Writing Windows VxDs and Device Drivers." The book and companion disk include the a......一起来看看 《Writing Windows VxDs and Device Drivers, Second Edition》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

html转js在线工具
html转js在线工具

html转js在线工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试