user3260589
user3260589

Reputation: 178

Limiting TextField inputs

I'm trying to make a textfield that limits a user input. I have this code:

 private void jTextField5KeyTyped(java.awt.event.KeyEvent evt) {                                     
//This limits the input:
 if(jTextField5.getText().length()>=2) {
    jTextField5.setText(jTextField5.getText().substring(0, 1));
}
}                  

It successfully limits the input. However, when I tried to press other characters on the keyboard, it changes the last character on the textfield. Any ideas to stop this? I know others will say that I should use Document(Can't remember) in making this kind of stuff, but I can't. I don't know how to do it in netbeans. Please help.

Upvotes: 2

Views: 21920

Answers (2)

A-SM
A-SM

Reputation: 884

Here's a simple way to do it:

private void textFieldKeyTyped(java.awt.event.KeyEvent evt) {                       
 if(textField.getText().length()>=2) {  
   evt.consume();
 }
}

Upvotes: 3

Alya'a Gamal
Alya'a Gamal

Reputation: 5638

Try this Example which Use PlainDocument :

class JTextFieldLimit extends PlainDocument {

private int limit;

JTextFieldLimit(int limit) {
    super();
    this.limit = limit;
}

JTextFieldLimit(int limit, boolean upper) {
    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);
    }
}
}

public class Main extends JFrame {

JTextField textfield1;
JLabel label1;

public void init() {
    setLayout(new FlowLayout());
    label1 = new JLabel("max 10 chars");
    textfield1 = new JTextField(10);
    add(label1);
    add(textfield1);
    textfield1.setDocument(new JTextFieldLimit(110));///enter here the Maximum input length you want
    setSize(300, 300);
    setVisible(true);
}


}

Upvotes: 0

Related Questions