[英]Stuck in loop with JOptionPane
我不确定 JOptionPanes 的最佳实践,尽管这同样可能只是一个逻辑问题。 我想要一个要求输入名称的输入框,检查它是一个仅包含字母的字符串,然后用户可以取消。
我知道取消 JOptionPane 会导致返回 null,我在一开始就实现了这一点。 问题是,如果用户在第一个窗格中输入错误,他们将无法从第二个窗格中取消。
编辑:值得指出的是,如果用户取消我不想对名称做任何事情。 这是迫使我陷入困境的问题。 逻辑应该是检查用户输入; 如果 ==2 什么都不做。 如果是别的,验证是一个词并使用它。 如果无效则循环。 问题是用户可以稍后取消并且使用名称的操作无论如何都会被执行,因为它在第二个循环中,值为 2。
我目前有:
JOptionPane optionPane1 = new JOptionPane(text, OK_OPTION, CANCEL_OPTION);
optionPane1.setWantsInput(true);
JDialog d1 = optionPane1.createDialog(null);
d1.setVisible(true);
name = optionPane1.getInputValue().toString();
if(name == null){
gamePaused = true;
}
else{
while(!name.matches("^[a-zA-Z]+$") || name.length() == 0){
JOptionPane optionPane2 = new JOptionPane("Please enter a word.\nTry again.", OK_OPTION, CANCEL_OPTION);
optionPane2.setWantsInput(true);
JDialog d2 = optionPane2.createDialog(null);
d2.setVisible(true);
name = optionPane2.getInputValue().toString();
}
///use name
}
有没有更好的方法可以让用户取消并退出循环?
您可以用这个替换所有代码
do {
name = JOptionPane.showInputDialog(null, "Enter name here : ", "title", JOptionPane.OK_CANCEL_OPTION);
} while(name != null && !name.matches("^[a-zA-Z]+$"));
if (name == null) {
gamePaused = true;
} else {
//Do whatever want with the name
}
问题是在你的while
循环中,没有进一步检查用户是否按下了取消(这意味着name == null
)。 一旦用户在他的第一次尝试中输入了一些无效的东西,他就会停留在while
循环中,并被一遍又一遍地询问他的名字,直到有一个有效的输入,并且程序不再关心他是否点击了取消。 因此,需要在name = optionPane2.getInputValue().toString();
之前加上 :
if (optionPane2.getInputValue() == null) {
gamePaused = true;
break;
}
在你的 while 循环中,检查用户是否选择了取消:在 while 循环中添加:
if(optionPane2.getValue().toString().equals ("2")){ // 2 for close option in your case
break;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.