Java 关闭JFrame窗口后启动事件

Java 关闭JFrame窗口后启动事件,java,swing,user-interface,jframe,Java,Swing,User Interface,Jframe,关闭窗口后,我想创建一个类的对象并执行一个任务。 结束后: setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 我可以做些什么,以便在窗口关闭后立即启动新操作? 请帮忙。打电话 frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); 并为关闭事件注册侦听器: frame.addWindowListener(new WindowAdapter() {

关闭窗口后,我想创建一个类的对象并执行一个任务。 结束后:

setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
我可以做些什么,以便在窗口关闭后立即启动新操作? 请帮忙。

打电话

frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
并为关闭事件注册侦听器:

frame.addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
        JFrame frame = (JFrame)e.getSource();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // additional code here
    }
});
召唤

并为关闭事件注册侦听器:

frame.addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
        JFrame frame = (JFrame)e.getSource();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // additional code here
    }
});

  • HIDE\u ON\u CLOSE
    simplair as
    setVisible(false),容器是可重用的,可以通过调用
    setVisible(true)来显示它

  • 或者您可以调用
    dispose()
    ,这意味着此容器不可重复使用,在调用
    setVisible(true)之前,必须检查
    isDisplayable()

我想创建一个类的对象并执行一个任务

  • 看,也许这是一个合适的方式

  • HIDE\u ON\u CLOSE
    simplair as
    setVisible(false),容器是可重用的,可以通过调用
    setVisible(true)来显示它

  • 或者您可以调用
    dispose()
    ,这意味着此容器不可重复使用,在调用
    setVisible(true)之前,必须检查
    isDisplayable()

我想创建一个类的对象并执行一个任务

  • 看,也许这是一个合适的方式

当用户试图关闭
JFrame
时,会发生以下事件:

  • 调用在该帧上注册的
    WindowListener
    s的
    windowClosing
    方法
  • 然后,触发
    setDefaultCloseOperation
    指定的操作
有4种默认关闭操作:

不要关门 ……什么也不做。框架仍然在这里,很高兴地忽略了您关闭它的请求

隐匿 与在帧上调用
setVisible(false)
的效果相同。帧变为不可见,可以通过调用
setVisible(true)
再次显示

封闭处置 与在框架上调用
dispose()
的效果相同。这种效果有点类似于HIDE_ON_CLOSE,不同之处在于这次,框架使用的操作系统资源被释放。如果要使框架再次显示,仍然可以再次调用
setVisible(true)

调用在该帧上注册的
WindowListener
s的
windowClosed
方法

另外,请注意,当最后一个可显示的窗口被释放时

关门退出 与调用
System.exit()
的效果相同


因此,如果您想完全控制用户尝试关闭帧时发生的情况,请将默认操作设置为在关闭时不执行任何操作,并将代码放入
WindowListener的
windowClosing
方法中。在这里,您可以调用setVisible(false)、dispose()或System.exit(),具体取决于您想要实现的目标

您还可以将默认操作设置为隐藏、处置或关闭时退出,并将代码放入
WindowListener的
windowClosing
方法中。在这种情况下,将首先调用侦听器,然后执行所选的操作,不管发生什么


最后,您还可以将默认操作设置为DISPOSE ON\u CLOSE,并将代码放入
WindowListener的
windowClosed
方法中。这样,首先释放帧(它从屏幕上消失),然后执行代码。

当用户尝试关闭
JFrame
时,会发生以下事件:

  • 调用在该帧上注册的
    WindowListener
    s的
    windowClosing
    方法
  • 然后,触发
    setDefaultCloseOperation
    指定的操作
有4种默认关闭操作:

不要关门 ……什么也不做。框架仍然在这里,很高兴地忽略了您关闭它的请求

隐匿 与在帧上调用
setVisible(false)
的效果相同。帧变为不可见,可以通过调用
setVisible(true)
再次显示

封闭处置 与在框架上调用
dispose()
的效果相同。这种效果有点类似于HIDE_ON_CLOSE,不同之处在于这次,框架使用的操作系统资源被释放。如果要使框架再次显示,仍然可以再次调用
setVisible(true)

调用在该帧上注册的
WindowListener
s的
windowClosed
方法

另外,请注意,当最后一个可显示的窗口被释放时

关门退出 与调用
System.exit()
的效果相同


因此,如果您想完全控制用户尝试关闭帧时发生的情况,请将默认操作设置为在关闭时不执行任何操作,并将代码放入
WindowListener的
windowClosing
方法中。在这里,您可以调用setVisible(false)、dispose()或System.exit(),具体取决于您想要实现的目标

您还可以将默认操作设置为隐藏、处置或关闭时退出,并将代码放入
WindowListener的
windowClosing
方法中。在这种情况下,将首先调用侦听器,然后执行所选的操作,不管发生什么


最后,您还可以将默认操作设置为DISPOSE ON\u CLOSE,并将代码放入
WindowListener的
windowClosed
方法中。这样,首先处理帧(它从屏幕上消失),然后执行代码。

除了添加侦听器之外,还有其他方法吗?我认为您还需要添加System.exit(0),因为joey的当前实现就是这样做的。@W.Goeman:这是通过
frame.setDefaultCloseOperation(JFrame.exit\u ON\u CLOSE)完成的@Joey Rohan为什么不使用li