2017-03-01 14 views
0

Javaを使いこなすので、どんな助けでも大歓迎です。 JTextFieldのデータ検証に小さな問題があります。 ユーザーに年齢、喫煙の有無、太りすぎの有無を入力するよう求められます。 喫煙と体重の検証がうまくいくので、年齢制限も設定されています。JTextFieldデータ検証

ageField JTextFieldに文字を入力すると、スタックしているように見え、他の検証エラーは表示されません。 (例えば、年齢は整数でなければなりませんが、smokesfieldに 'h'を入力した場合、「Smoke inputはY、Y、Nまたはnでなければなりません」と表示されます)

申し訳ありませんが、それは長くて肥満な説明です!とにかくここ

は、私は、ありがとうと困難を抱えているコードです:

public void actionPerformed(ActionEvent e) 
{ 
String ageBox = ageField.getText(); 
int age = 0; 

if (e.getSource() == reportButton) 
{ 
    if (ageBox.length() != 0) 
     { 
      try 
      { 
      age = Integer.parseInt(ageBox); 
      } 
      catch (NumberFormatException nfe) 
      { 
      log.append("\nError reports\n==========\n");  
      log.append("Age must be an Integer\n"); 
      ageField.requestFocus(); 
      }   
     } 
    if (Integer.parseInt(ageBox) < 0 || Integer.parseInt(ageBox) > 116) 
    { 
     log.append("\nError reports\n==========\n"); 
     log.append("Age must be in the range of 0-116\n"); 
     ageField.requestFocus(); 
    } 
    if (!smokesField.getText().equalsIgnoreCase("Y") && !smokesField.getText().equalsIgnoreCase("N")) 
    { 
     log.append("\nError reports\n==========\n"); 
     log.append("Smoke input should be Y, y, N or n\n"); 
     smokesField.requestFocus(); 
    } 
    if (!overweightField.getText().equalsIgnoreCase("Y") && !overweightField.getText().equalsIgnoreCase("N")) 
    { 
     log.append("\nError reports\n==========\n"); 
     log.append("Over Weight input should be Y, y, N or n\n"); 
     smokesField.requestFocus(); 
    } 
    } 
+0

2番目の 'Integer.parseInt(ageBox)'は例外をスローします – Jerry06

答えて

0

あなたが述べたような状況から、それはライン

if (Integer.parseInt(ageBox) < 0 || Integer.parseInt(ageBox) > 116) 
{ 
... 

があるため、未処理はNumberFormatExceptionを投げている可能性がありますageBoxで手紙を入力しました。 try/catchハンドラによって例外がキャッチされているため、最初に「Age is an Integer」という正しい出力が得られますが、この2番目の発生にはそのような処理はありません。

try 
    { 
     if (Integer.parseInt(ageBox) < 0 || Integer.parseInt(ageBox) > 116) 
     { 
      log.append("\nError reports\n==========\n"); 
      log.append("Age must be in the range of 0-116\n"); 
      ageField.requestFocus(); 
     } 
    } 
    catch (NumberFormatException nfe) 
    ... 

この方法で、あなたはまだ場合は、「整数でなければならない時代」の出力が得られます:文のtryブロック内の、そのような場合は

すると、この問題を解決するために、私は単にそれが特定の移動しますageBoxに無効なエントリがあり、他のすべてがうまく動作するはずです。

+0

クイック返信ありがとうございました。 あなたが提案したことを試してみて、現在は完全に機能しています。 – RiceCrispy

+0

@RiceCrispy問題はありません、私はあなたがそれが役に立つと嬉しく思っています! –