javaswing

How To limit the number of characters in JTextField?


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

Suppose I want to enter say 5 characters max. After that no characters can be entered into it.


Solution

  • http://www.rgagnon.com/javadetails/java-0198.html

    import javax.swing.text.PlainDocument;
    import javax.swing.text.AttributeSet;
    import javax.swing.text.BadLocationException;
    
    public class JTextFieldLimit extends PlainDocument {
      private int limit;
    
      JTextFieldLimit(int limit) {
       super();
       this.limit = limit;
       }
    
      public void insertString( int offset, String  str, AttributeSet attr ) throws BadLocationException {
        if (str == null) return;
    
        if ((getLength() + str.length()) <= limit) {
          super.insertString(offset, str, attr);
        }
      }
    }
    

    Then

    import java.awt.*;
    import javax.swing.*;
    
     public class DemoJTextFieldWithLimit extends JApplet{
       JTextField textfield1;
       JLabel label1;
    
       public void init() {
         getContentPane().setLayout(new FlowLayout());
         //
         label1 = new JLabel("max 10 chars");
         textfield1 = new JTextField(15);
         getContentPane().add(label1);
         getContentPane().add(textfield1);
         textfield1.setDocument
            (new JTextFieldLimit(10));
         }
    }
    

    (first result from google)