JOptionPane处理ok,取消和x按钮

时间:2014-07-26 10:43:56

标签: java swing joptionpane

我的JOptionPane面临一个问题 如果我没有键入任何内容,无论我按什么(ok,cancel或x按钮(JOptionPane中的右上角按钮)),它都会提示我,直到我键入正值。但我只想在按下确定时发生提示。

如果我点击取消或x按钮(JOptionPane中的右上角按钮),它将关闭JOptionPane

我该怎么做?

import javax.swing.JOptionPane;

public class OptionPane {
    public static void main(final String[] args) {
        int value = 0;
        boolean isPositive = false , isNumeric = true;
        do {
            try {
                value = Integer.parseInt(JOptionPane.showInputDialog(null,
                    "Enter value?", null));
            } catch (NumberFormatException e) {
                System.out.println("*** Please enter an integer ***");
                isNumeric = false;
            }

             if(isNumeric) {
                if(value <= 0) {
                    System.out.println("value cannot be 0 or negative");
                }

                else {
                    System.out.println("value is positive");
                    isPositive = true;
                }
            }
        }while(!isPositive);
    }
}

3 个答案:

答案 0 :(得分:4)

这方面的基本方法可能如下所示:

@MadProgrammer评论后更新。

import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class DemoJOption {
    public static void main(String args[]) {
        int n = JOptionPane.showOptionDialog(new JFrame(), "Message", 
        "Title", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, 
        null, new Object[] {"Yes", "No"}, JOptionPane.YES_OPTION);

        if (n == JOptionPane.YES_OPTION) {
            System.out.println("Yes");
        } else if (n == JOptionPane.NO_OPTION) {
            System.out.println("No");
        } else if (n == JOptionPane.CLOSED_OPTION) {
            System.out.println("Closed by hitting the cross");
        }
    }
}

答案 1 :(得分:1)

只需移动try块中的代码,一旦输入正数,就不需要使用任何标志break无限循环。

示例代码:

public static void main(final String[] args) {
    int value = 0;
    while (true) {
        try {
            value = Integer.parseInt(JOptionPane.showInputDialog(null, "Enter value?", null));

            if (value <= 0) {
                System.out.println("value cannot be 0 or negative");
            } else {
                System.out.println("value is positive");
                break;
            }
        } catch (NumberFormatException e) {
            System.out.println("*** Please enter an integer ***");
        }
    }
}

答案 2 :(得分:1)

JoptionPane#showInputDialog returns user's input, or null meaning the user canceled the input.

所以不要直接解析返回值。首先检查它是否为空(用户已取消)然后如果不为null则不执行任何操作,然后解析整数值