有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Why PlainDocument()设置在JtextField中。setDocument()排除文本中的一个字符

有人知道为什么在JtextField中,当我设置setDocument()属性时,当我执行程序时,它会显示字段ok,但当我将maxlength属性设置为N个字符长度时,只有我可以输入N-1个字符

// 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)) {**

共 (1) 个答案

  1. # 1 楼答案

    MaxLengthTextArea is a class extended from PlainDocument: used just to set via parameter the number of characters I want for that field

    正如我在评论中建议的那样,你应该使用DocumentFilter。阅读Swing教程中关于Implementing a Document Filter的部分,了解更多信息和工作示例