1

以下のpgmを使用して、アドレス帳に詳細を保存しました。mob が int であるかどうかを確認したい。最初のうちは正しく実行されます (モブ フィールドに文字を入力すると、保存されません)。でも2回目からはmobフィールドに文字入力しても保存されます。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("");

数値入力のみを取得するには、次のコードを試してください

jtfmob = new JFormattedTextField(NumberFormat.getInstance());
于 2013-08-13T06:20:48.737 に答える
2

次回メソッドjtfmob.setText("")を実行する前に、完全なロジックを記述してください。

于 2013-08-13T06:19:37.380 に答える
1

これは非常に明白なケースです。初めて jtfmob テキスト フィールドを解析すると、その中の値が検索されます。値が整数でない場合は、まったく解析されず、null 値が返されます。ただし、値が整数の場合は、問題なく続行されます。

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

mob には、解析された値が整数データ型で含まれます。しかし、次にテキストフィールドに文字を入力すると、解析できないため、例外が発生します(正常にキャッチしています)。プログラムの制御は、整数型変数mobの値を更新せずに catch ブロックに転送されます。したがって、mobにはOLD値が含まれ(例外のために値が更新されないため)、この場合も同じになります。

この問題を解決するには、catch ブロックにメッセージを表示して正しい値を入力するか、自分で他の方法を見つけてください。

于 2013-08-13T06:28:08.953 に答える