有人知道爲什麼在JtextField中,當我設置setDocument()屬性時 - 類PlainDocument-當我執行程序時,它顯示出字段好吧,但只有我可以輸入N-1個字符,當我將maxlength prop設置爲N個字符長度。爲什麼設置在JtextField.setDocument()中的PlainDocument()排除了文本的一個字符
// Block 1
txtPais.setDocument(new MaxLengthTextCntry());
我有另一類內部設定的最大長度
// Block 2
public class MaxLengthTextCntry extends MaxLengthGeneric{
public MaxLengthTextCntry(
{
super(2);
}
}
最後MaxLengthGeneric類
// Block 3
public abstract class MaxLengthGeneric extends PlainDocument {
private int maxChars;
public MaxLengthGeneric(int limit) {
super();
this.maxChars = limit;
}
public void insertString(int offs, String str, AttributeSet a)
throws BadLocationException {
if (str != null && (getLength() + str.length() < maxChars)) {
super.insertString(offs, str, a);
}
}
}
SOLUTION
維護塊2,我用塊代替塊1
((AbstractDocument) txtRucnumero.getDocument()).setDocumentFilter(new MaxLengthTextRuc());
塊3改變了對DocumentFilter的依賴。不要忘記實現父類方法insertString()和replace()!基於http://docs.oracle.com/javase/tutorial/uiswing/examples/components/TextComponentDemoProject/src/components/DocumentSizeFilter.java
或解決方案2
public abstract class MaxLengthGeneric extends DocumentFilter {
...
@Override
public void insertString(FilterBypass fb, int offs, String str,
AttributeSet a) throws BadLocationException {
if ((fb.getDocument().getLength() + str.length()) <= maxChars)
super.insertString(fb, offs, str, a);
else
Toolkit.getDefaultToolkit().beep();
}
@Override
public void replace(FilterBypass fb, int offs, int length, String str,
AttributeSet a) throws BadLocationException {
if ((fb.getDocument().getLength() + str.length() - length) <= maxChars)
super.replace(fb, offs, length, str, a);
else
Toolkit.getDefaultToolkit().beep();
}
}
(或者調試Jnewbies生活的重要性:<與<取代=)
** if (str != null && (getLength() + str.length() <= maxChars)) {**
你不聽我們的建議。在您的問題中發佈代碼,而不是發表評論。上面的代碼沒有格式化或不可讀。此外,代碼與我的答案無關。你實際上必須閱讀我給你的鏈接。 – camickr
編輯你的問題,而不是評論,包括一個[sscce](http://sscce.org/),也許使用camickr引用的例子之一。 – trashgod