如何检测用户是否通过红叉关闭窗口?

时间:2016-11-30 11:09:34

标签: java exit joptionpane

我的代码的目标是获取用户输入,当用户想要保存数据时,他们按OK选项。但是,如果用户输入了一些数据,并且不再想继续,那么他们只需按下右上角的红色十字退出按钮即可退出而不保存?

我该怎么做?

这是我的代码:

JOptionPane.showMessageDialog(null, myPanel, "Edit Fruit", JOptionPane.INFORMATION_MESSAGE);

...

if (!(JOptionPane.OK_OPTION))
{
   //If the user exits the option pane via the red cross, exit the loop.
   break;
}

编辑:此代码不起作用,因为我只是在通过红叉而不是确定按钮关闭JOptionPane.showMessageDialog时才查找:

addWindowListener(new WindowAdapter()
    {
        @Override
        public void windowClosing(WindowEvent e)
        {
            System.out.println("Closed");
            e.getWindow().dispose();
        }
    });

即使我按下JOptionPane中的OK选项,代码仍会执行。我只想通过红十字会听出口。

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

首先,只有当用户通过红色x关闭窗口时才会执行非常标准的UI - 而不是通过键入 Alt - F4 ,或双击图标,或 Alt - Space - C ,依此类推;所以我假设你只是意味着关闭而不是按下OK按钮而不是特别是红色x。

您有代码可以检测窗口何时关闭。

当用户按下OK按钮时,您可以检测到代码。

因此设置一个标志以指示按下了OK按钮,如果在窗口关闭时没有设置标志,则用户关闭窗口而不按OK按钮。

答案 1 :(得分:1)

使用关键字“JOptionPanel close listener”进行另一次快速搜索会转到另一个问题。

How can I add a listener on the ok button of JOptionPane?

接受的答案建议检查方法showOptionDialog的返回值。

  

但是您可以将方法JOptionPane.showOptionDialog与单个方法一起使用   单击“确定”按钮DEFAULT_OPTIONshowOptionDialog将返回0   如果单击确定,则单击-1如果用户关闭了对话框。

int res = JOptionPane.showOptionDialog(null, "Hello", "Test",
JOptionPane.DEFAULT_OPTION,
    JOptionPane.INFORMATION_MESSAGE, null, null, null);

System.out.println(res); 
     

您不需要监听器,因为javadoc说:

     
    

每个showXxxDialog方法都会阻止调用者,直到用户为止     互动已经完成。

  

这里,正如第一个答案所暗示的那样,关闭与rea cross,关键组合等之间没有区别。但是,我想也许你不需要。