首页 > 其他分享 >如何在关闭窗口时增加确认框

如何在关闭窗口时增加确认框

时间:2023-05-26 18:35:02浏览次数:46  
标签:窗口 javafx 确认 window 关闭 import

如何在关闭窗口时增加确认框

当我们点击窗口的关闭图标时,窗口马上会被关闭。如何增加一个确认框,当用户确认时才关闭窗口呢?

image

方法是为窗口 Stage 设置一个在关闭时的事件回调函数,在里面做相应的处理。

代码片段如下:

window.setOnCloseRequest(e ->
{
    e.consume(); // 告诉 JavaFX 我们想自己处理窗口的关闭
    boolean isConfirmed = new ConfirmWindow().open("确认关闭窗口吗?");
    if (isConfirmed)
    {
        window.close();
    }
});

在窗口关闭时,会调用此 lambda 表达式。在 lambda 表达式中,我们:

  1. 通过调用 e.consume() 取消了默认的窗口关闭行为
  2. 然后通过确认框来确认关闭。关闭的方法是 window.close()

完整代码

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class WindowCloseEventExample extends Application
{
    @Override
    public void start(Stage window) throws Exception
    {
        VBox vBox = new VBox();

        Scene scene = new Scene(vBox, 400, 300);

        window.setScene(scene);
        window.setTitle(this.getClass().getSimpleName());
        window.setOnCloseRequest(e ->
        {
            e.consume(); // 告诉 JavaFX 我们想自己处理窗口的关闭
            boolean isConfirmed = new ConfirmWindow().open("确认关闭窗口吗?");
            if (isConfirmed)
            {
                window.close();
            }
        });
        window.show();
    }

    public static void main(String[] args)
    {
        launch(args);
    }
}

代码说明

在 setOnCloseRequest 回调函数中我们打开了一个确认框 ConfirmWindow ,关于 ConfirmWindow 的实现可参考这篇博客:https://www.cnblogs.com/javafx-howto/p/17433516.html

总结

如果我们想自己处理窗口的关闭,可以使用下面的步骤:

  1. 调用 window.setOnCloseRequest 设置窗口关闭时的处理函数
  2. 调用 e.consume() 取消默认的关闭行为
  3. 自行调用 window.close() 来关闭窗口,比如打开一个确认框并确认后

标签:窗口,javafx,确认,window,关闭,import
From: https://www.cnblogs.com/javafx-howto/p/17435539.html

相关文章

  • FLEX实践—获取当前窗口大小
       在FLEX中获取当前窗口的长度与宽度使用下面的方法:   Application.application.width   Application.application.height    在设置弹出窗口的长与宽的时候可以根据比例来设置,而不用将其长与宽设置为固定值。这样做的好处是考虑到了IE窗口的大小,通过比例设置可......
  • 关闭浏览器https 调用http 文件的问题
    关闭浏览器https调用http的JS文件拦截和警告会涉及到安全性问题,建议不要直接禁用。如果确实需要屏蔽提醒,可以参考以下方法:使用浏览器插件:可以安装一些浏览器插件,例如HTTPSEverywhere、DisableMixedContent等来屏蔽https调用http的js文件的拦截和警告。更改浏览器安全设置......
  • 疑难杂症(已解决) | 为什么出现python中tkinter创建界面需要一闪而过才进入主窗口?
    一、具体问题如图所示,我编写了一个主窗口的程序(如下所示,有兴趣的可以自己复制后运行),发现需要先进入第一个窗口再进入主界面,这不符合逻辑。 代码区域(完整代码):fromtkinterimport*classWinGUI(Tk):def__init__(self):super().__init__()self......
  • 在命令提示符窗口输入docker ps提示链接错误
    一、前言  在命令行窗口执行dockerps命令的时候,报错了 二、处理方法  提示这个错误可能是dockerdaemon没有打开    发现docker服务没有打开,把docker服务打开试试    然后进入到“C:\ProgramFiles\Docker\Docker”目录下,执行DockerCli.exe-SwitchDaem......
  • 如何打开新的窗口
    如何打开新的窗口JavaFX程序有一个主窗口,就是start函数的第一个参数。有时我们还想打开新的窗口,比如一个提示窗口。效果如下:应该怎样打开新窗口呢?方法就是创建一个新的Stage,然后设置它的Scene,调用如window.show()这样的方法。下面是一个打开一个新窗口的代码例子:p......
  • 关闭Windows更新服务bat
    @echooff>nul2>&1"%SYSTEMROOT%\system32\cacls.exe""%SYSTEMROOT%\system32\config\system"if'%errorlevel%'NEQ'0'(gotoUACPrompt)else(gotogotAdmin):UACPromptechoSetUAC=CreateObject^(......
  • RabbitMQ之消息确认机制
    RabbitMQ之消息确认机制标签(空格分隔):php,rabbitmq在使用RabbitMQ的时候,我们可以通过消息持久化操作来解决因为服务器的异常奔溃导致的消息丢失,除此之外我们还会遇到一个问题,当消息的发布者在将消息发送出去之后,消息到底有没有正确到达broker代理服务器呢?如果不进行特殊配置的话......
  • Qt窗口关闭和应用程序停止是否调用析构函数的一些说明
    这几天一直在模仿QQ做一个即时通讯软件,过程不是很顺利,表现在窗口关闭,应用程序依旧存在,应用程序异常结束,关闭子窗口,主窗口跟着关闭,所以总结了一些内容,方便日后获取。如果对这个项目有兴趣的话可以前往GitHub:https://github.com/FdogMain/FdogInstantMessagingmain函数中,在栈上创建的......
  • Qt父窗口与子窗口数据交互(用拾色器举例)
    文章目录一.效果图二.实现1.在子窗口中声明信号2.在主窗口中声明并实现槽函数,并进行信号与槽的绑定3.在子窗口中发送信号(emit),并完成其控件的相应4.在子窗口的构造函数中传入需要的主窗口数据一.效果图二.实现首先我们创建主窗口和子窗口,并拖动控件,完成基本界面。这里的布局以及......
  • 关于MYSQL连接后关闭连接问题
    因为创建连接并注册驱动时可能会错先错误,但是链接还是会进行创建 ,如果不判断连接Connection为不为空就关闭的话会引起空指针异常,同理ResultSet、PreparedStatement也是如此。创建顺序是从Connection->Preparedstatment->ResultSet,关闭顺序则是从ResultSet->Preparedstat......