关闭对话框窗口的可选方法

时间:2014-02-28 20:32:13

标签: java swing jdialog

我正在使用自定义JFrame在我正在处理的Java应用程序中实现一个简单的对话框。

用户按下窗口中的“应用”按钮后,应该关闭。

最常规的做法是什么?课程中setVisible(false)是最好的方法吗?有什么方法可以推荐吗?

3 个答案:

答案 0 :(得分:3)

要关闭Swing中的窗口,例如JFrameJDialog,您有两种选择。

致电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);