2013-10-04 37 views
0

我有DocumentLitener将所有文本转换为大写,并且它还限制了可以输入的文本数量。这里是我的课:DocumentListener限制字符 - 影响复制/粘贴

公共类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个字符的限制。

对此有何建议?

回答

0

如果(fb.getDocument()。的getLength()+ text.length()>极限)

你的计算没有考虑到将被删除的字符数,如由替换(...)方法的length参数指定。

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