0

プログラムを実行するときに setDocument() プロパティ -class PlainDocument- を設定すると、JtextField で理由を誰かが知っています。文字の長さ。

// 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);
            }
        }
    }

解決

ブロック 2 を維持し、ブロック 1 を

((AbstractDocument) txtRucnumero.getDocument()).setDocumentFilter(new MaxLengthTextRuc());

ブロック 3 は、DocumentFilter からの依存関係を変更しました。親メソッド insertString() と replace() の両方を実装することを忘れないでください!!

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();
    }
}

http://docs.oracle.com/javase/tutorial/uiswing/examples/components/TextComponentDemoProject/src/components/DocumentSizeFilter.javaに基づく

または解決策 2 (または、Jnewbies の生活にとってのデバッグの重要性: < を <= に置き換えます)

**    if (str != null && (getLength() + str.length() <= maxChars)) {**
4

1 に答える 1