java swing重写窗体关闭事件_java Swing如何自定义JFrame的关闭事件

java Swing如何自定义JFrame的关闭事件?当用户关闭应用程序窗口的时候,我们可能希望程序在结束之前保存一些必要的数据。对于这种需求,两种备选方案:

2.1 获取程序关闭的“钩子”

Runtime.getRuntime().addShutdownHook(shutdownHook);

protected Thread shutdownHook = new PlatformShutdownHook();

protected class PlatformShutdownHook extends Thread {

public void run()

{

//一些清理工作在这里进行……

}

}

通过这种方法,我们就可以在程序结束时获得通知,以便进行一些保存或清理的工作。然而这种方法的缺点是,在程序收到结束通知的时候,所有的UI组件已经被销毁了,用户此时看到的是程序已经结束。而事实上如果程序保存需要花很长的时间的话,用户是不能获取任何信息的,这是一个很糟糕的用户体验。因为如果这时用户关机的话,程序就有可能丢失尚未保存的信息,而对于这一切,用户并不知情。

2.2 处理JFrame关闭事件

为了在UI被销毁之前收到程序结束的消息,我们需要自行处理窗口关闭的事件。注意在这里我们没有采用addActionListener(……)方法,因为这样做只能让我们在窗口关闭之后收到通知,这样就与上面的方法没什么区别了。

我们需要在JFrame的构造函数中设置:

//设定标志,让MainFrame自己接收窗口事件

enableEvents(AWTEvent.WINDOW_EVENT_MASK);

然后再实现下面的函数:

protected void processWindowEvent(final WindowEvent pEvent) {

if (pEvent.getID() == WindowEvent.WINDOW_CLOSING) {

/** 防止用户多次点击“关闭”按钮造成重复保存 **/

if( !isClosing ) isClosing = true;

else return;

//处理JFrame关闭事件……

}else{

//忽略其他事件,交给JFrame处理

super.processWindowEvent(pEvent);

}

}

如此一来,我们就可以在窗口被关闭之前通知用户程序正在保存数据的信息,例如后面提到的InfiniteProgressPanel可以显示的内容。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值