繁体   English   中英

与 JOptionPane 陷入循环

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM