如何以编程方式关闭JFrame

问题

让aJFrame关闭的正确方法是什么,就像用户点击了X关闭按钮,或者按下了F4(在Windows上)?

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

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

它完全符合我想要的上述控件。这个问题与此无关。

我真正想要做的是使GUI的行为方式与按下X关闭按钮会导致它的行为相同。

假设我要扩展WindowAdaptor,然后通过addWindowListener()添加我的适配器实例作为监听器。我想通过Xclose按钮看到相同的调用序列通过windowDeactivated(),windowClosing()windowClosed()。可以这么说,撕毁窗户就像告诉它撕裂自己一样。


#1 热门回答(266 赞)

如果你希望GUI的行为就像你单击了X关闭按钮,那么你需要将窗口关闭事件分派给Window。 TheExitActionfromClosing An Application允许你将此功能添加到菜单项或任何轻松使用Action的组件。

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

#2 热门回答(117 赞)

setVisible(false); //you can't see me!
dispose(); //Destroy the JFrame object

不太狡猾。


#3 热门回答(24 赞)

如果用Alt-F4或X表示"立即退出应用程序而不考虑其他Windows或线程正在运行",那么System.exit(...)将以非常突然,暴力和可能有问题的方式完全按照你的意愿行事。

如果按Alt-F4或X表示隐藏窗口,那么frame.setVisible(false)就是"关闭"窗口的方式。窗口将继续消耗资源/内存,但可以非常快速地再次显示。

如果用Alt-F4或X表示隐藏窗口并处理它正在消耗的任何资源,那么frame.dispose()就是你如何"关闭"窗口。如果框架是最后一个可见窗口并且没有其他非守护程序线程在运行,程序将退出。如果再次显示该窗口,则必须再次重新初始化所有本机资源(图形缓冲区,窗口句柄等)。

dispose()可能最接近你真正想要的行为。如果你的应用程序打开了多个窗口,你是否希望Alt-F4或X退出应用程序或关闭活动窗口?

TheJava Swing Tutorial on Window Listeners可能会帮你澄清一些事情。