2012-09-13 3 views
2

사용자 지정 DocumentFilter을 만듭니다.DocumentFilter에 변수 전달

그러나 여러 가지 구성 요소에 사용해야합니다. 이들 사이의 유일한 차이점은 글자 수 제한이며, 이는 단일 변수를 변경하여 변경할 수 있습니다.

이 문제는 어떻게 DocumentFilter에 그 변수를 전달합니까입니까?

int charLimit = 40; 
doc = (AbstractDocument) JTextArea.getDocument(); 
doc.setDocumentFilter(new DefaultDocFilter()); 

가 어떻게이 DefaultDocFilter?

답변

4

당신은 단순히 멤버 변수로 추가 할 수 있습니다 : 다음

class DefaultDocFilter extends DocumentFilter 
{ 
    private int charLimit = 40; 

    public void insertString(FilterBypass fb, int offs, 
     String str, AttributeSet a) 
    { 
     //do something with charLimit 
    } 

    public void replace(FilterBypass fb, int offs, int length, 
     String str, AttributeSet a) 
    { 
     //do something else with charLimit 
    } 

    public int getCharLimit() { 
     return charLimit; 
    } 

    public void setCharLimit(int charLimit) { 
     this.charLimit = charLimit; 
    } 
} 

:

문서 필터를 추가 할 때

class DefaultDocFilter extends DocumentFilter 
{ 
    private final int charLimit; 

    public DefaultDocFilter(int charLimit) { 
     this.charLimit = charLimit; 
    } 

    public void insertString(FilterBypass fb, int offs, 
     String str, AttributeSet a) 
    { 
     //do something with charLimit 
    } 

    public void replace(FilterBypass fb, int offs, int length, 
     String str, AttributeSet a) 
    { 
     //do something else with charLimit 
    } 
} 

그런 다음, 당신의 한계와 새로 건설

doc.setCharLimit(charLimit); 
4

추가로 charLimit를 전달하지 : 주요 코드

class DefaultDocFilter extends DocumentFilter 
{ 
    public void insertString(FilterBypass fb, int offs, 
     String str, AttributeSet a) 
    { 
     //do something with charLimit 
    } 

    public void replace(FilterBypass fb, int offs, int length, 
     String str, AttributeSet a) 
    { 
     //do something else with charLimit 
    } 
} 

구현 :

은 (대부분의 코드 제거) 내 사용자 지정 DocumentFilter 클래스 하위 클래스에 대한 변수.

textField.getDocument().setDocumentFilter(new DefaultDocFilter(20));