限制JTextField的字符数

时间:2015-05-04 10:12:27

标签: java swing

我想将要插入JTextField的字符数限制为10个字符。我在netbeans.thanks下使用了一个图形界面。

3 个答案:

答案 0 :(得分:1)

为防止用户在文本字段中输入更多10个字符,您可以使用文档。

通过扩展PlainDocument并更改行为覆盖

来创建简单文档
public void insertString(...) throws BadLocationException

这是一个例子

public class MaxLengthTextDocument extends PlainDocument {
    //Store maximum characters permitted
    private int maxChars;

    @Override
    public void insertString(int offs, String str, AttributeSet a)
            throws BadLocationException {
        // the length of string that will be created is getLength() + str.length()
        if(str != null && (getLength() + str.length() < maxChars)){
            super.insertString(offs, str, a);
        }
    }

}

在此之后,只需在JTextField中插入您的实现,这样:

...
MaxLengthTextDocument maxLength = new MaxLengthTextDocument();
maxLength.setMaxChars(10); 

jTextField.setDocument(maxLength);
...

那就是它!

答案 1 :(得分:0)

最好的是你将获得运行演示;)

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 static void main(String[]args){
      new Main().init();
  }
  public void init() {
    setLayout(new FlowLayout());
    label1 = new JLabel("max 10 chars");
    textfield1 = new JTextField(15);
    add(label1);
    add(textfield1);
    textfield1.setDocument(new JTextFieldLimit(10));

    setSize(300,300);
    setVisible(true);
  }
}

答案 2 :(得分:0)

阅读Implementing a DocumentFilter上Swing教程中的部分,了解更新的解决方案。

此解决方案将适用于任何Document,而不仅仅是PlainDocument。