2

カスタムを作成しています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());

charLimitに渡すにはどうすればよいですかDefaultDocFilter?

4

2 に答える 2

4

変数をサブクラスに追加します。

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));
于 2012-09-13T17:05:40.577 に答える
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;
    }
}

それから:

doc.setCharLimit(charLimit);
于 2012-09-13T17:05:42.623 に答える