如何以编程方式关闭JFrame
问题
让aJFrame
关闭的正确方法是什么,就像用户点击了X
关闭按钮,或者按下了F4(在Windows上)?
我通过以下方式设置我的默认关闭操作:
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
它完全符合我想要的上述控件。这个问题与此无关。
我真正想要做的是使GUI的行为方式与按下X
关闭按钮会导致它的行为相同。
假设我要扩展WindowAdaptor
,然后通过addWindowListener()
添加我的适配器实例作为监听器。我想通过X
close按钮看到相同的调用序列通过windowDeactivated()
,windowClosing()
和windowClosed()
。可以这么说,撕毁窗户就像告诉它撕裂自己一样。
#1 热门回答(266 赞)
如果你希望GUI的行为就像你单击了X
关闭按钮,那么你需要将窗口关闭事件分派给Window
。 TheExitAction
fromClosing 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可能会帮你澄清一些事情。