限制JTextField中的输入长度不起作用

时间:2012-10-25 19:11:30

标签: java swing user-interface document jtextfield

我试图限制用户可以在文本字段中输入的字符的最大长度,但它似乎无法正常工作。

以下是代码:

text2 = new JTextField("Enter text here",8);

我做错了什么吗?如何使限制正常工作?

5 个答案:

答案 0 :(得分:13)

您当前的代码未设置最大长度,而是定义可见列的数量。

要限制数据的最大长度,您可以为文本字段设置自定义Document,该字段不允许添加中断最大长度限制:

public final class LengthRestrictedDocument extends PlainDocument {

  private final int limit;

  public LengthRestrictedDocument(int limit) {
    this.limit = limit;
  }

  @Override
  public void insertString(int offs, String str, AttributeSet a)
      throws BadLocationException {
    if (str == null)
      return;

    if ((getLength() + str.length()) <= limit) {
      super.insertString(offs, str, a);
    }
  }
}

然后设置文本字段以使用此文档:

text2.setDocument(new LengthRestrictedDocument(8));

答案 1 :(得分:9)

构造函数

new JTextField("Enter text here",8);

将可见列数设置为8,但不限制您输入更多列。

您可以使用DocumentFilter来限制输入长度。

答案 2 :(得分:0)

只需扩展JTextField类并覆盖构造函数中的KeyReleased事件,并将其指向检查长度的新方法:

package gui;

import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.JTextField;

public class RecordClassTextField extends JTextField {

    public RecordClassTextField() {
        this.addKeyListener(new KeyAdapter() {
            @Override
            public void keyReleased(KeyEvent e) {
                cleanText();
            }
        });
    }

    private void cleanText()
    {
        if(this.getText().length() > 17){
            System.out.println("Over 17");
        }
    }
}

答案 3 :(得分:0)

我相信这会对你有所帮助。我刚刚向KeyListener添加了keyTypedJTextField。当用户在KeyListener语句中输入超过定义限制的字符时,if将起作用。

text2 = new JTextField("Enter text here",8);
text2.addKeyListener(new KeyAdapter() {
        public void keyTyped(KeyEvent e) {
            if (text2.getText().length() == 8) {
                e.consume();
            }
        }
    });

答案 4 :(得分:0)

无需使用任何API
只需在TextFieldKeyTyped事件

上编写此代码
if (jTextField.getText().trim().length() == 8 || evt.getKeyChar() == java.awt.event.KeyEvent.VK_BACK_SPACE) {
        evt.consume();
    }