2013-10-04 64 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示例以獲取解決方案。