javaswingjtextfielddocumentlistenerdocumentfilter

Limit the Characters in the text field using document listner


How to limit the number of characters entered in a JTextField using DocumentListener?

Suppose I want to enter 30 characters max. After that no characters can be entered into it. I use the following code:

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
    }
}
}

Solution

  • You'll want to use a DocumentFilter for this purpose. As the applies, it filters documents.

    Something like...

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

    Create to MDP's Weblog