java - 使用文档监听器限制文本字段中的字符

标签 java swing jtextfield documentlistener documentfilter

如何使用 DocumentListener 限制在 JTextField 中输入的字符数?

假设我想最多输入 30 个字符。之后就不能再输入任何字符了。我使用以下代码:

public class TextBox extends JTextField{
public TextBox()
{
    super();
    init();
}

private void init()
{
    TextBoxListener textListener = new TextBoxListener();
    getDocument().addDocumentListener(textListener);
}
private class TextBoxListener implements DocumentListener
{
    public TextBoxListener()
    {
        // TODO Auto-generated constructor stub
    }

    @Override
    public void insertUpdate(DocumentEvent e)
    {
        //TODO
    }

    @Override
    public void removeUpdate(DocumentEvent e)
    {
        //TODO
    }

    @Override
    public void changedUpdate(DocumentEvent e)
    {
        //TODO
    }
}
}

最佳答案

您需要使用 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();
    }
}

创建到MDP's Weblog

关于java - 使用文档监听器限制文本字段中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12812844/

相关文章:

java - "cscript//NoLogo"代表什么?

java - Clone() vs Copy constructor - 在java中推荐

java - 计算时在 JTextArea 中显示文本

java - Swing:无法在带有图像的面板内设置 jtextfield 的颜色

java - 是否可以显示多个文本字段,供用户在每个文本字段中输入他们想要的项目数?

java - Java中JTextArea的自动动态扩展/收缩

java - 保存到内存 Android

java - OpenGL 着色器 - 使用法线旋转顶点

java - 如何实现网页应用的屏幕共享?

java - 通过代码 View 在 netbeans 中添加 JComponent