ShowOptionDialog取消选项不起作用

时间:2015-11-30 15:56:46

标签: java swing

我正在尝试为我的程序创建一个GUI。此特定GUI使用带有showOptionDialog的JOptionsPane。我已经为该OptionsPane添加了一个面板,其中包含一些动作侦听器以及两个列表和其他一些内容,但这对于这个问题并不重要。

很简单,我想让我的showOptionDialog在用户点击"取消"按钮。 (它基本上会结束程序,但必须以某种方式完成)。现在,当用户点击"取消"程序继续,好像用户刚刚结束该对话框但没有采取任何措施。我试图更改变量,如果他们单击取消,这将阻止程序的其余部分运行。我用System.out.println测试了我的值是否真的被改变了,我发现这个步骤根本没有发生。所以我想根据这段代码知道我做错了什么。当用户单击取消时,我需要做什么才能使代码正确运行?

我没有更多的代码可以显示,因为我的程序非常大,我无法隔离这种情况。

提前感谢您的帮助!

public static void displayGUI(){

        int result = JOptionPane.showOptionDialog(null, getPanel(),"JOptionPane Example : ", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, null, new String[]{"Confirm","Create Return"}, "default");

        if(result == JOptionPane.CANCEL_OPTION){
            initialScreenDecisions="NONE";
            MainWriter.finishedCounter=true;
            System.out.println(MainWriter.finishedCounter);
            while(MainWriter.entryDetails.size()>0){
                MainWriter.entryDetails.remove(0);
            }
            while(output.size()>0){
                output.remove(0);
            }
        }
    }

*即使用户选择取消,这部分代码也不会被执行:

if(result == JOptionPane.CANCEL_OPTION){
            initialScreenDecisions="NONE";
            MainWriter.finishedCounter=true;
            System.out.println(MainWriter.finishedCounter);
            while(MainWriter.entryDetails.size()>0){
                MainWriter.entryDetails.remove(0);
            }
            while(output.size()>0){
                output.remove(0);
            }
        }

4 个答案:

答案 0 :(得分:1)

您告诉JOptionPane创建两个按钮(“确认”和“创建返回”),然后告诉它默认按钮是“默认”但您没有文本“默认”的按钮。你也没有取消“。如果用户选择”确认“,返回值将为0,如果用户选择”创建返回“,则返回值为1;如果用户只是关闭对话框,则返回CLOSED_OPTION。

答案 1 :(得分:1)

从你的问题:
*This part of the code isn't being executed, even if the user selects cancel:

尝试从integer返回的JOptionPane.showOptionDialog()值。如果选择了0,则会返回OK,如果选择了1,则会返回Cancel

修改您的code,如下所示:

if(result == 1){
        initialScreenDecisions="NONE";
        MainWriter.finishedCounter=true;
        System.out.println(MainWriter.finishedCounter);
        while(MainWriter.entryDetails.size()>0){
            MainWriter.entryDetails.remove(0);
        }
        while(output.size()>0){
            output.remove(0);
        }
    }

让我知道,如果这不能帮助你!!!

答案 2 :(得分:1)

如果您查看JOptionPane.showOptionDialog的JavaDocs,它会告诉您

  

返回:
一个整数,表示用户选择的选项,或   如果用户关闭了对话框,则为CLOSED_OPTION

这是您传递给方法的options数组的索引。在这种情况下new String[]{"Confirm","Create Return"}

因此,0的返回值意味着Confirm被选中,1将被视为Create Return被选中(或JOptionPane.CLOSE_OPTION如果用户关闭了窗口)

答案 3 :(得分:0)

result分配您正在使用JOptionPane.OK_CANCEL_OPTION的值但在if条件中,您正在检查JOptionPane.CANCEL_OPTION