1

我使用下面的 pgm 将详细信息保存在地址簿上。我想检查提交的 mob 是否为 int。它会在第一次正确执行(如果我在 mob 字段中输入字母,它将不会保存)。但是从第二次开始,即使我在暴民文件中输入了一个字母,它也会保存。mob 将存储先前的值。第一次执行后如何清除暴民存档.....

 public void savePerson() {  
    name   =   jtfName.getText();
    name   =   name.toUpperCase();  
    jtfName.setText(name);
    address = jtfAddress.getText();

    try {
        landline = Integer.parseInt(""+jtfLandline.getText());
    } catch(Exception e) {          
    }

    try {           
       mob = Integer.parseInt(""+jtfmob.getText());     
    }catch(Exception e) {
    }

    email   = jtfEmail.getText();
   if(name.equals("")) {
        JOptionPane.showMessageDialog(null, "Please enter person name.");           
   } else if(mob == 0) {
        JOptionPane.showMessageDialog(null, "Please enter Mobile Number.");
   } else {
          //create a PersonInfo object and pass it to PersonDAO to save it
          PersonInfo person = new PersonInfo(name, address, landline, mob , email);
          pDAO.savePerson(person);
          JOptionPane.showMessageDialog(null, "Person Saved");            
          clear();         
   }
 }
4

4 回答 4

2

在执行下一次使用方法之前jtfmob.setText(""),然后编写完整的逻辑。

于 2013-08-13T06:19:37.380 回答
2

试试这个,

第一次迭代结束后,通过如下设置重置您的文本字段

jtfmob.setText("");

要单独获取数字输入,请尝试以下代码

jtfmob = new JFormattedTextField(NumberFormat.getInstance());
于 2013-08-13T06:20:48.737 回答
1

这是一个非常明显的案例。当您第一次解析 jtfmob 文本字段时,它会在其中查找值。如果该值不是整数,则根本不会被解析,您将得到空值。但是,如果该值是整数,您将毫无问题地继续进行。

mob = Integer.parseInt(""+jtfmob.getText());

mob 将包含整数数据类型的解析值。但是下次当您在文本字段中输入字母时,它将无法解析并因此导致异常(您正在成功捕获)。程序的控制权将转移到 catch 块而不更新整数类型变量mob的值。所以mob将包含 OLD 值(因为由于异常而没有更新值)并且在这种情况下你得到的也是相同的。

要解决这个问题,要么在 catch 块中显示一些消息以输入正确的值,要么自己找到其他方法

于 2013-08-13T06:28:08.953 回答
0

在您的构造函数中使用以下内容。

jTextField1.setText("");

每次单击按钮之前,它都会重置您的值。

于 2013-08-13T06:45:58.060 回答