我有一个将所有文本转换为大写的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个字符的单词。我在字段中选择(全选)文本,并尝试粘贴6个字符的单词,替换5个字符的单词。但是,它不允许我这样做,我只能假设这是由于DocumentListener认为我正在执行的5+6超过了10个字符的限制。
对此有什么建议吗?
发布于 2013-10-05 00:23:13
限制if (fb.getDocument().getLength() + text.length() >
)
您的计算没有考虑将被删除的字符数,如替换(...)的length参数所指定的方法。
请看Swing教程中的Implementing a Document Filter示例以获得解决方案。
https://stackoverflow.com/questions/19185892
复制相似问题