我正在尝试为我的程序创建一个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);
}
}
答案 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