我有一个分数计算器GUI,并且我需要一个条件,即它只接受整数,并且如果用户在输入数字时输入小数点,则会输出一条错误消息。
这是我的GUI。
这是我的GUI代码:
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == this.computeButton){
try {
Fraction f1 = new Fraction(Integer.parseInt(Num1.getText()), Integer.parseInt(Den1.getText()));
Fraction mixed1 = new Fraction(Integer.parseInt(Mixed1.getText()),1);
Fraction f2 = new Fraction(Integer.parseInt(Num2.getText()), Integer.parseInt(Den2.getText()));
Fraction mixed2 = new Fraction(Integer.parseInt(Mixed2.getText()),1);
Fraction ff1= f1.mul(mixed1);
Fraction ff2 = f2.mul(mixed2);
if (!Mixed1.getText().isEmpty())
ff1.setWholeNumber(Integer.parseInt(Mixed1.getText()));
if (!Mixed2.getText().isEmpty()){
ff2.setWholeNumber(Integer.parseInt(Mixed2.getText()));
}
Fraction res;
switch (comboBox1.getSelectedIndex()){
case 0: //addition
res = ff1.add(ff2);
break;
case 1://subtraction
res = ff1.sub(ff2);
break;
case 2://multiplication
res = ff1.mul(ff2);
break;
case 3://division
res = ff1.div(ff2);
break;
default: res = new Fraction(1,1);
}
Label.setText(res.getResult());
Decimal.setText(Double.toString(res.toDecimal()));
}catch (Exception ex){
ex.getMessage();
}
}
}
是否可以为此类问题创建方法?
答案 0 :(得分:3)
这是编写验证字符串是否为有效整数值的函数的简单方法:
boolean isValidInteger(String str) {
try {
Integer.parseInt(str);
} catch (NumberFormatException ignore) {
return false;
}
return true;
}
您还可以将错误处理合并到您自己的输入解析中,这样就无需调用Integer.parseInt()两次。
答案 1 :(得分:1)
您可以使用parseInt获得所需的结果。 JOptionPane可以显示输入错误
JTextField txtField = new JTextField();
int displayValue;
String displayTextField = txtField.getText();
if(!"".equals(displayTextField ))
{
try
{
displayValue = Integer.parseInt(displayTextField);
}
catch (NumberFormatException e)
{
javax.swing.JOptionPane.showConfirmDialog(null, "Wrong number, please enter Integer number", "Error", javax.swing.JOptionPane.PLAIN_MASSAGE);
return;
}
}
答案 2 :(得分:0)
如果用户输入小数点,是否要引发错误?更好的用户界面(UI)会带来更好的用户体验,只会阻止用户输入除数字之外的任何东西,甚至可能输入符号。
您可以通过TextFormatter来设置TextField.setTextFormatter,以确保该值是有效的整数。
如果您仍然想检查一个值是否有小数点,可以通过尝试使用Integer.parseInt()(或Long.parseLong())解析它,或遍历字符来轻松实现。并确保所有字符都是数字,并允许第一个字符为符号。