我正在使用自定义JFrame在我正在处理的Java应用程序中实现一个简单的对话框。
用户按下窗口中的“应用”按钮后,应该关闭。
最常规的做法是什么?课程中setVisible(false)
是最好的方法吗?有什么方法可以推荐吗?
答案 0 :(得分:3)
要关闭Swing中的窗口,例如JFrame或JDialog,您有两种选择。
dispose()
只需致电dispose()方法:
public void dispose()
释放此Window使用的所有本机屏幕资源 子组件及其拥有的所有子组件。也就是资源 对于这些组件将被销毁,他们消耗的任何内存都将被销毁 返回操作系统,它们将被标记为不可显示。
例如:
frame.dispose();
dialog.dispose();
WINDOW_CLOSING
事件您可以像这样发送新的WindowEvent:
frame.dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING));
dialog.dispatchEvent(new WindowEvent(dialog, WindowEvent.WINDOW_CLOSING));
如果窗口附有WindowListener,则会通知它。如果设置了框架(或对话框)的默认关闭操作,则将执行此操作。可能的关闭操作是:
DO_NOTHING_ON_CLOSE
(在WindowConstants
中定义):不要做任何事情;
要求程序在windowClosing中处理操作
已注册的WindowListener对象的方法。HIDE_ON_CLOSE
(在WindowConstants
中定义):自动隐藏
调用任何已注册的WindowListener对象后的帧。DISPOSE_ON_CLOSE
(在WindowConstants中定义):自动隐藏和
在调用任何已注册的WindowListener之后处理该帧
对象。EXIT_ON_CLOSE
(在JFrame
中定义且不适用于JDialog
):使用系统退出方法退出应用程序。仅在应用程序中使用它。答案 1 :(得分:1)
这取决于你想要达到的目标。将窗口设置为不可见只会隐藏它,但它仍将在后台运行(JFrame / InternalFrame)。您可以使用JDialog(请参阅JOptionPane作为示例)来创建在单击其中一个按钮时真正关闭的临时帧。您还可以在用户关闭窗口时检索所选选项(此处:Javadoc)。您也可以通过触发事件来强行关闭窗口,如下所示:
Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(
new WindowEvent(frame, WindowEvent.WINDOW_CLOSING)
)
例如在actionlistener中。
答案 2 :(得分:1)
关闭JFrame时可以执行多项操作。
假设您有一个JFrame
JFrame frame = new JFrame();
这个在关闭时退出JVM。
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
这个只是隐藏了JFrame。
frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
这个处理JFrame。
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
当处理Java虚拟机(VM)中的最后一个可显示窗口时,VM可以终止
默认情况下什么都不做。
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);