DocumentListener限制字符 - 影响复制/粘贴

时间:2013-10-04 16:08:25

标签: java filter documentlistener

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

public class 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);
}

}

我的问题是这个。假设textfield的字符数限制为10.我输入5个字符。然后我复制一个6个字符的单词。我在字段中按CTRL + A(全选)文本并尝试粘贴6个字符的单词,替换5个字符。但是,它不会让我这样做,我只能假设它由于DocumentListener认为我正在做5 + 6,这超过10个字符限制。

对此有何建议?

1 个答案:

答案 0 :(得分:0)

  

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

您的计算未考虑将被删除的字符数,如replace(...)方法的length参数所指定。

查看Swing教程中的Implementing a Document Filter示例以获得解决方案。