JOptionPane是一个Yes或No窗口

15
我正在尝试创建一个带有“是”或“否”按钮的消息。然后,根据用户点击“是”或“否”,会出现一个窗口,其中包含特定消息。
以下是我的代码:
public class test{
    public static void main(String[] args){

        //default icon, custom title
        int n = JOptionPane.showConfirmDialog(
            null,
            "Would you like green eggs and ham?",
            "An Inane Question",
            JOptionPane.YES_NO_OPTION);

        if(true){
            JOptionPane.showMessageDialog(null, "HELLO");
        }
        else {
            JOptionPane.showMessageDialog(null, "GOODBYE");
        }

        System.exit(0);
    }
}

现在它会打印HELLO,无论你是否选择是或否。如何让它在用户选择否时显示GOODBYE?


你的代码中有死代码。你的else部分永远不会被执行。 - Harry Joy
2
10个赞和7次收藏,我在想为什么。 - ave4496
8个回答

79

"if(true)" 总是会为真,它永远不会执行 else 语句。如果你想让它正常工作,必须这样做:

int reply = JOptionPane.showConfirmDialog(null, message, title, JOptionPane.YES_NO_OPTION);
if (reply == JOptionPane.YES_OPTION) {
    JOptionPane.showMessageDialog(null, "HELLO");
} else {
    JOptionPane.showMessageDialog(null, "GOODBYE");
    System.exit(0);
}

21
如果这个答案对你有帮助,你应该给它点赞并接受它。 - sloth

8
你总是检查一个真实的条件,因此你的信息将始终显示。
你应该用if ( n == JOptionPane.YES_OPTION)替换你的if (true)语句。
当showXxxDialog方法之一返回整数时,可能的值为:
YES_OPTION NO_OPTION CANCEL_OPTION OK_OPTION CLOSED_OPTION
来自这里

1
+1 链接到 JavaDocs,但我更新了链接从 1.4.2 到 1.7,并添加了一个锚点到字段摘要。 - Andrew Thompson

4
您可以使用以下方法解决此问题:
if(n == JOptionPane.YES_OPTION)
{
    JOptionPane.showMessageDialog(null, "HELLO");
}
else
{
    JOptionPane.showMessageDialog(null, "GOODBYE");
}

3
你可以更简单地完成这个操作:
int test = JOptionPane.showConfirmDialog(null, "Would you like green eggs and ham?", "An insane question!");
switch(test) {
    case 0: JOptionPane.showMessageDialog(null, "HELLO!"); //Yes option
    case 1: JOptionPane.showMessageDialog(null, "GOODBYE!"); //No option
    case 2: JOptionPane.showMessageDialog(null, "GOODBYE!"); //Cancel option
}

2
你在 switch 语句中漏掉了 break 语句。 - aristotll

3

是和否消息的代码

      int n = JOptionPane.showConfirmDialog(  
                null,
                "sample question?!" ,
                "",
                JOptionPane.YES_NO_OPTION);

      if(n == JOptionPane.YES_OPTION)
      {
          JOptionPane.showMessageDialog(null, "Opening...");
      }
      else
      {
          JOptionPane.showMessageDialog(null, "Goodbye");
          System.exit(0);

那些复制粘贴的代码末尾应该有一个闭合大括号 :) - benji127

2

您正在编写if(true),因此它将始终显示“Hello”消息。

您应该根据返回的n值做出决策。


是的,但我该如何编写代码呢?我可以将输出赋值给一个变量,但我不知道如何做到这一点。 - Josh King
1
@JoshKing 我不记得确切的值了。尝试在控制台上打印n的值,并检查当按下“是”时它给出什么,以及当按下“否”时它给出什么。然后使用if(n == ?) else。 - gprathour
1
"..然后使用if(n == ?)" 不要使用“魔法值”。定义的常量将在下一个JRE,明年起起作用。 - Andrew Thompson

1
为了更好地理解它是如何工作的!
int n = JOptionPane.showConfirmDialog(null, "Yes No Cancel", "YesNoCancel", JOptionPane.YES_NO_CANCEL_OPTION);
    if(n == 0)
        {
        JOptionPane.showConfirmDialog(null, "You pressed YES\n"+"Pressed value is = "+n);
        }
    else if(n == 1)
        {
        JOptionPane.showConfirmDialog(null, "You pressed NO\n"+"Pressed value is = "+n);
        }
    else if (n == 2)
        {
        JOptionPane.showConfirmDialog(null, "You pressed CANCEL\n"+"Pressed value is = "+n);
        }
    else if (n == -1)
        {
        JOptionPane.showConfirmDialog(null, "You pressed X\n"+"Pressed value is = "+n);
        }

或者

int n = JOptionPane.showConfirmDialog(null, "Yes No Cancel", "YesNoCancel", JOptionPane.YES_NO_CANCEL_OPTION);
    switch (n) {
        case 0:
            JOptionPane.showConfirmDialog(null, "You pressed YES\n"+"Pressed value is = "+n);
            break;
        case 1:
            JOptionPane.showConfirmDialog(null, "You pressed NO\n"+"Pressed value is = "+n);
            break;
        case 2:
            JOptionPane.showConfirmDialog(null, "You pressed CANCEL\n"+"Pressed value is = "+n);
            break;
        case -1:
            JOptionPane.showConfirmDialog(null, "You pressed X\n"+"Pressed value is = "+n);
            break;
        default:
            break;
    }

0

大致上是这样的……

   //default icon, custom title
int n = JOptionPane.showConfirmDialog(null,"Would you like green eggs and ham?","An Inane Question",JOptionPane.YES_NO_OPTION);

String result = "?";
switch (n) {
case JOptionPane.YES_OPTION:
  result = "YES";
  break;
case JOptionPane.NO_OPTION:
  result = "NO";
  break;
default:
  ;
}
System.out.println("Replace? " + result);

你可能也想看看DialogDemo


你已经两次写了 case JOptionPane.NO_OPTION: - Harry Joy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接