【发布时间】:2010-10-08 16:28:00
【问题描述】:
单击JFrame 右上角的关闭 (x) 按钮的编程等效项是什么?
有 dispose() 方法,但这不是一回事,因为 JFrame 可以设置为在关闭时执行多种不同的操作(更不用说是否涉及 WindowListener)
【问题讨论】:
-
+1。我一直想知道这一点,但从来没有花时间问。
单击JFrame 右上角的关闭 (x) 按钮的编程等效项是什么?
有 dispose() 方法,但这不是一回事,因为 JFrame 可以设置为在关闭时执行多种不同的操作(更不用说是否涉及 WindowListener)
【问题讨论】:
您告诉组件调度一个事件。在这种情况下,您希望它调度一个 Window Closing 事件。
private void exit() {
this.dispatchEvent(new WindowEvent(this, WindowEvent.WINDOW_CLOSING));
}
【讨论】:
public void closeWindow() 作为我的签名。)
当您点击 JFrame 上的 x 时,系统可以设置为执行各种操作。我相信默认是用 setVisible(false) 简单地隐藏窗口。
你可以设置一个框架在关闭时做不同的事情——你可以让它根据 setDefaultCloseOperation 处理、隐藏或调用代码。以下是选项:
DO_NOTHING_ON_CLOSE:什么都不做;要求程序在注册的WindowListener对象的windowClosing方法中处理操作。
HIDE_ON_CLOSE:在调用任何已注册的 WindowListener 对象后自动隐藏框架。
DISPOSE_ON_CLOSE:在调用任何已注册的 WindowListener 对象后自动隐藏和处置框架。
EXIT_ON_CLOSE:使用系统退出方法退出应用程序。仅在应用程序中使用它。
但我认为你所追求的是 setVisible(false)。
【讨论】:
您必须将调用插入到 AWT 消息队列中,以便所有时间都正确发生,否则它将无法调度正确的事件序列,尤其是在多线程程序中。
public void closeWindow()
{
if(awtWindow_ != null) {
EventQueue.invokeLater(new Runnable() {
public void run() {
awtWindow_.dispatchEvent(new WindowEvent(awtWindow_, WindowEvent.WINDOW_CLOSING));
}
});
}
}
【讨论】: