0

すべてのテキストを大文字に変換する DocumentLitener があり、入力できるテキストの量も制限されます。これが私のクラスです:

public class UppercaseDocumentFilter extends DocumentFilter {

private int limit;

public UppercaseDocumentFilter(int maxCharacters) {
    limit = maxCharacters;
}

@Override
public void insertString(DocumentFilter.FilterBypass fb, int offset, String text, AttributeSet attr) throws BadLocationException {
    if (fb.getDocument().getLength() + text.length() > limit) {
        return;
    }
    fb.insertString(offset, text.toUpperCase(), attr);

}

@Override
public void replace(DocumentFilter.FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException {
    if (fb.getDocument().getLength() + text.length() > limit) {
        return;
    }
    fb.replace(offset, length, text.toUpperCase(), attrs);
}

@Override
public void remove(DocumentFilter.FilterBypass fb, int offset, int length) throws BadLocationException {
    fb.remove(offset, length);
}

}

私の問題はこれです。テキストフィールドの文字数制限が 10 だとします。5 文字入力します。次に、6 文字の単語をコピーします。フィールド内のテキストを CTRL+A (すべて選択) し、6 文字の単語を貼り付けて、5 文字の単語を置き換えようとします。しかし、それは私にそれをさせません.10文字の制限を超える5 + 6を実行しているとDocumentListenerが考えているためだと思います。

これに関する提案はありますか?

4

1 に答える 1

0

if (fb.getDocument().getLength() + text.length() > limit)

lengthreplace(...) メソッドのパラメーターで指定されているように、削除される文字数は考慮されていません。

ソリューションについては、Swing チュートリアルのドキュメント フィルターの実装の例を参照してください。

于 2013-10-04T16:23:12.877 に答える