2013-05-17 50 views
0

有人知道爲什麼在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)) {** 

回答

6

MaxLengthTextArea是擴展一個類來自PlainDocument:僅用於通過參數設置該字段所需的字符數

正如我在我的評論中所建議的,您應該使用DocumentFilter。請參閱Implementing a Document Filter上的Swing教程部分以獲取更多信息和工作示例。

+1

你不聽我們的建議。在您的問題中發佈代碼,而不是發表評論。上面的代碼沒有格式化或不可讀。此外,代碼與我的答案無關。你實際上必須閱讀我給你的鏈接。 – camickr

+1

編輯你的問題,而不是評論,包括一個[sscce](http://sscce.org/),也許使用camickr引用的例子之一。 – trashgod

相關問題