我想让JTextField具有最大字符数,我一直在尝试这段代码,我想做的是,如果用户输入的字符数超过13个,则应该删除最后输入的字符,我也尝试使用Unicode字符(通过替换\ b到\ u0008),但给出的结果相同,这是我的代码:

if(EditTxtFName.getText().length() > 10)
{
    EditTxtFName.setBackground(Color.red);
    EditTxtFName.setText(EditTxtFName.getText() + "\b");
}
else
{
    EditTxtFName.setBackground(Color.white);
}


所发生的结果是,不是删除最后一个字符,而是增加了空格并继续。
提前致谢..

最佳答案

使用DocumentFilter,它旨在允许您在将内容添加到文本组件的基础Document中之前对其进行过滤...

有关更多详细信息,请参见Implementing a Document Filter

例如...

import java.awt.*;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;

public class SizeFilter extends DocumentFilter {

    private int maxCharacters;

    public SizeFilter(int maxChars) {
        maxCharacters = maxChars;
    }

    public void insertString(FilterBypass fb, int offs, String str, AttributeSet a)
            throws BadLocationException {

        if ((fb.getDocument().getLength() + str.length()) <= maxCharacters)
            super.insertString(fb, offs, str, a);
        else
            Toolkit.getDefaultToolkit().beep();
    }

    public void replace(FilterBypass fb, int offs, int length, String str, AttributeSet a)
            throws BadLocationException {

        if ((fb.getDocument().getLength() + str.length()
                - length) <= maxCharacters)
            super.replace(fb, offs, length, str, a);
        else
            Toolkit.getDefaultToolkit().beep();
    }
}


可以使用类似...

((AbstractDocument) EditTxtFName.getDocument()).setDocumentFilter(new SizeFilter(13));


DocumentFilter Examples中的示例

10-05 17:54
查看更多