0

我有将所有文本转换为大写的 DocumentLitener,它还限制了可以输入的文本数量。这是我的课:

公共类 UppercaseDocumentFilter 扩展 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 个字符的单词。但是,它不会让我这样做,我只能假设它是因为 DocumentListener 认为我正在做 5+6,这超过了 10 个字符的限制。

对此有何建议?

4

1 回答 1

0

if (fb.getDocument().getLength() + text.length() > 限制)

您的计算没有考虑将被删除的字符数,由lengthreplace(...) 方法的参数指定。

查看Swing 教程中的实现文档过滤器示例以获得解决方案。

于 2013-10-04T16:23:12.877 回答