我的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);
}
}
答案 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则不执行任何操作,然后解析整数值