限制TextField输入

时间:2014-02-05 08:48:18

标签: java netbeans jtextfield

我正在尝试创建一个限制用户输入的文本字段。 我有这段代码:

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

它成功地限制了输入。但是,当我尝试按下键盘上的其他字符时,它会更改文本字段上的最后一个字符。 有什么想法阻止这个?我知道其他人会说我应该使用Document(不记得了)制作这类东西,但我不能。我不知道如何在netbeans中做到这一点。 请帮忙。

2 个答案:

答案 0 :(得分:2)

这是一个简单的方法:

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

答案 1 :(得分:0)

尝试使用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);
}


}