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

6

我试图限制用户在文本字段中输入的字符的最大长度,但似乎没有起作用。

这是代码:

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

我有做错的地方吗?我该如何使限制正常工作?

4个回答

19

你当前的代码并没有设置最大长度,而是在定义可见列数。

为了限制数据的最大长度,你可以为文本字段设置自定义文档(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));

9
构造函数
new JTextField("Enter text here",8);

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

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


1
你可以在这里找到一个很好的例子来实现这个功能 (http://www.java2s.com/Tutorial/Java/0240__Swing/LimitJTextFieldinputtoamaximumlength.htm)。 - Designpattern

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

这种方法无法与Paste一起使用,请使用自定义的PlainDocument。 - lmiguelmh

-1
无需使用任何 API
只需要在 TextFieldKeyTyped 事件上编写此代码即可。
if (jTextField.getText().trim().length() == 8 || evt.getKeyChar() == java.awt.event.KeyEvent.VK_BACK_SPACE) {
        evt.consume();
    }  

在使用此代码集之前,设置JTextField属性setTransferHandler(null);,这将防止粘贴。


这个方法无法与Paste一起使用,请使用自定义的PlainDocument。 - lmiguelmh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接