2014-04-19 3 views
0

다른 사람들이 만든 맞춤형 PlainDocument를 필요에 따라 만들려고했으나 PlainDocument의 메커니즘을 모르기 때문에 실패했으며 작동하지 않았습니다. 제 텍스트 필드에 2 글자 만 허용 할 수있는 무언가가 필요합니다. 따라서 두 번만 나타나는 a-zA-Z도 있습니다. 나는 이것을 먼저 시도했다.내 DocumentFilter에 무엇이 잘못되었는지 알아낼 수 없습니다.

public class LetterDocument extends PlainDocument { 

    private String text = ""; 

    @Override 
    public void insertString(int offset, String txt, AttributeSet a) { 
     try { 
      text = getText(0, getLength()); 
      if ((text + txt).matches("^[a-zA-Z]{2}$")) { 
       super.insertString(offset, txt, a); 
      } 
     } catch (Exception ex) { 
      Logger.getLogger(LetterDocument.class.getName()).log(Level.SEVERE, null, ex); 
     } 

     } 
    } 

이것은 아무 것도 타이핑하지 못하게한다. 내가 잘못 무엇 아무 생각이

public class LetterDocument extends PlainDocument { 
    private int limit; 
    private String text = ""; 

    LetterDocument(int limit) { 
     super(); 
     this.limit = limit; 
    } 

    @Override 
    public void insertString(int offset, String txt, AttributeSet a) 
      throws BadLocationException { 
     if (txt == null) 
      return; 
     try { 
      text = getText(0, getLength()); 

      if (((text + txt).matches("[a-zA-Z]")) 
        && (txt.length()) <= limit) { 
       super.insertString(offset, txt, a); 
      } 
     } catch (Exception ex) { 
      Logger.getLogger(LetterDocument.class.getName()).log(Level.SEVERE, 
        null, ex); 
     } 

    } 
} 

: 그때 내가 문자를 제한이 개 다른 스레드에서 입력 할 문자 만시키는 그들 중 하나, 다른에서 함께 퍼팅 시도하는이를 시도했다.

답변

2

사용자 지정 문서를 사용하지 마십시오.

대신 DocumentFilter을 사용하십시오. 문서에 입력 할 수있는 문자 수를 제한하는 작동 예제는 Implementing a Document Filter에있는 스윙 튜토리얼의 섹션을 읽으십시오.

그런 다음 추가 로직 만 추가하여 문자 만 추가되도록하십시오.

또는 더 쉬운 옵션은 문자 마스크가있는 JFormatttedTextField를 사용하는 것입니다. 다시 Using a Formatted Text Field의 자습서를 참조하십시오.

+0

2 차원 마스크 (글자 수 제한 및 마스크)가 필요하므로 필자의 phoneNumber 및 zip code textfield에 마스크 포맷터를 사용하고 문자와 숫자로만 제한하기 때문에 주소, 도시, 이름에 DocumentFilter를 사용했습니다. 너무 걱정하지 않아요. 고맙습니다! – Abdul

+0

또한 오류가 발생하지는 않지만 JTextField와 JFormattedTextfield에 대한 모든 점이 유연성과 예외가있는 메서드와 같은 것입니까? 내가 가서 수정해야 할 경우에 대비해서 부탁합니다. – Abdul

관련 문제