程序关闭JFrame

时间:2010-10-08 16:28:01

标签: java swing jframe

点击JFrame右上角的关闭(x)按钮的程序化等价物是什么?

dispose()方法,但这不是一回事,因为JFrame可以设置为在关闭时执行几个不同的事情(更不用说是否涉及WindowListener

3 个答案:

答案 0 :(得分:16)

告诉组件调度事件。在这种情况下,您希望它发送一个Window Closing事件。

private void exit() {
    this.dispatchEvent(new WindowEvent(this, WindowEvent.WINDOW_CLOSING));
}

答案 1 :(得分:2)

当您在JFrame上点击x时,系统可以设置为执行各种操作。默认情况下,窗口只是用setVisible(false)隐藏,我相信。

您可以设置框架以在关闭时执行不同的操作 - 您可以根据setDefaultCloseOperation处理,隐藏或调用代码。以下是选项:

DO_NOTHING_ON_CLOSE:什么都不做;要求程序在已注册的WindowListener对象的windowClosing方法中处理操作。

HIDE_ON_CLOSE:在调用任何已注册的WindowListener对象后自动隐藏框架。

DISPOSE_ON_CLOSE:在调用任何已注册的WindowListener对象后自动隐藏和处理框架。

EXIT_ON_CLOSE:使用系统退出方法退出应用程序。仅在应用程序中使用它。

但我认为你所追求的是setVisible(false)。

答案 2 :(得分:0)

您必须将调用插入到AWT消息队列中,以便所有时间都正确发生,否则它将不会调度正确的事件序列,尤其是在多线程程序中。

public void closeWindow()
{
    if(awtWindow_ != null) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                awtWindow_.dispatchEvent(new WindowEvent(awtWindow_, WindowEvent.WINDOW_CLOSING));
            }
        });
    }
}