将变量传递给DocumentFilter

问题描述:

我正在创建一个自定义DocumentFilter。我不得不在几个不同的组件上使用它。它们之间的区别仅在于字符限制,可以通过更改单个变量来改变。将变量传递给DocumentFilter

问题是,如何将该变量传递给DocumentFilter

这是我的自定义DocumentFilter类(大部分的代码删除):

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 
    } 
} 

主代码执行:

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

我如何通过charLimitDefaultDocFilter?

你可以简单地添加为成员变量:

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; 
    } 
} 

则:

doc.setCharLimit(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 
    } 
} 

然后,当您添加的文件过滤器,只是构建一个新的与你的极限:

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