9.8 如何以编程方式关闭JFrame| Java Debug 笔记

208 阅读1分钟

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看<活动链接>

提问:如何以编程方式关闭JFrame

关闭JFrame的正确方法是什么,就像用户按下X关闭按钮或按下Alt + F4键(在Windows上)一样?

我通过以下方式设置了我想要的默认关闭操作:

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

它确实符合我想要的上述控件的功能。 这个问题不是关于这个的。

我真正想做的是使GUI的行为与按X关闭按钮的行为相同。

假设我要扩展WindowAdaptor,然后通过addWindowListener()将适配器的实例添加为侦听器。 我希望通过windowDeactivated(),windowClosing()和windowClosed()看到与X关闭按钮相同的调用序列。 可以说,与其说是要关闭窗口,还不如说是要告诉窗口请关闭自己。

回答1:

如果您希望GUI像单击X关闭按钮那样运行,则需要向窗口分派一个窗口关闭事件。ExitAction具有关闭应用程序的功能,您可以将此功能添加到菜单项或易于使用Actions的任何组件中。

frame.dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING));

回答2:

如果您这样做是为了确保用户无法关闭窗口:

frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

然后,您应该将pullThePlug()方法更改为

public void pullThePlug() {
    // 这将确保WindowListener.windowClosing()等被调用
    WindowEvent wev = new WindowEvent(this, WindowEvent.WINDOW_CLOSING);
    Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(wev);
    //这将隐藏并放置frame,以便在没有其他东西的情况下,应用程序自行退出

    setVisible(false);
    dispose();
    // 如果周围还有其他类似的frame,则也应将其放置。


    System.exit(0); 
}

我发现这是将WindowListener和JFrame.DO_NOTHING_ON_CLOSE配合使用的唯一好方法。