2010-11-21 9 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; 
    } 

} 

편집 : 아래 내가 솔루션으로 사용하여 종료 것입니다. 나는 처음에 이것을 실제로 시도했지만 작동하지 않는 것처럼 보였다. 테스트에서 오류가 발견되었습니다. gui를 시작한 직후 올바르지 않은 값으로 텍스트 필드를 변경하려고했지만 필드를 비워 두었습니다. 그러나 텍스트 필드는 GUI가 시작하자마자 초점을 맞추기 때문에 초기 값은 null로 생각됩니다. 후속 변경 사항이 예상대로 작동합니다.

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) { 
      text.setText(old); 
      //return false; // don't use this otherwise it won't revert the value 
     } 
     return true; 
    } 
} 

답변

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를 전달하는 대신, 단지 문자열 값을 전달합니다.

관련 문제