本文正在参加「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配合使用的唯一好方法。