2010-11-21 16 views
1

jTextFieldの場合はInputVerifierがあり、ユーザーからの入力が整数かどうかを確認することができます。そうでない場合、私はそれを最後の良い値に戻したいと思います。どうすればいいですか?ここで私はこれまで持っているコードです:jTextFieldを良好な値に戻す

class IntegerVerifier extends InputVerifier { 

    public boolean verify(JComponent input) { 
      JTextField text = (JTextField)input; 
      String old = text.getText(); 
     try { 
      Integer.parseInt(text.getText().trim()); 
     } catch (NumberFormatException e) { 
      // this does not work b/c input is not a TextField 
      input.setText(old); 
     } 
     return true; 
    } 

} 

EDIT:以下は私が解決策として使用して終了するものです。私は実際にこれを最初に試しましたが、動作していないようです。私は、エラーがテストにあったことを発見しました。私はguiを開始した直後にテキストフィールドを無効な値に変更しようとしましたが、フィールドを空白にします。しかし、テキストフィールドは、GUIが始まるとすぐにフォーカスを持っていたので、初期値はnullだと思います。その後の変更は期待どおりに動作しました。

答えて

1

あなたの質問は、あなたのコードのコメントに別の問題点があります。現在の入力が無効である場合は、検証後に古い値を保存して元に戻す必要があります。 input.setText()ではなく、text.setText()に電話する必要があります。このような何か:

class IntegerVerifier extends InputVerifier { 
    String lastGood = ""; 
    public boolean verify(JComponent input) { 
     JTextField text = (JTextField)input; 
     String value = text.getText().trim(); 
     try { 
      Integer.parseInt(value); 
      lastGood = value; 
     } catch (NumberFormatException e) { 
      text.setText(lastGood); 
      // assumed it should return false 
      return false; 
     } 
     return true; 
    } 
} 
0

よりもむしろJComponentを渡し、単なる文字列値を渡します。

関連する問題