为了账号安全,请及时绑定邮箱和手机立即绑定

限制JTextField中的字符数

限制JTextField中的字符数

肥皂起泡泡 2019-11-18 10:27:10
我想设置最大长度JTextField,这样您输入的字符数不能超过限制。这是我到目前为止的代码...    textField = new JTextField();    textField.setBounds(40, 39, 105, 20);    contentPane.add(textField);    textField.setColumns(10);有什么简单的方法可以限制字符数?
查看完整描述

3 回答

?
繁华开满天机

TA贡献1816条经验 获得超4个赞

您可以执行以下操作(从此处获取):


import java.awt.FlowLayout;


import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JTextField;

import javax.swing.text.AttributeSet;

import javax.swing.text.BadLocationException;

import javax.swing.text.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(15);

    add(label1);

    add(textfield1);

    textfield1.setDocument(new JTextFieldLimit(10));


    setSize(300,300);

    setVisible(true);

  }

}

编辑:看看这个以前的SO职位。您可以拦截按键事件,并根据文本字段中当前的字符数添加/忽略它们。


查看完整回答
反对 回复 2019-11-18
?
慕的地6264312

TA贡献1817条经验 获得超6个赞

自从DocumentFilterJava 1.4中引入以来,Document就已经覆盖了重写的 需求。


DocumentFilter提供了一种Document在实际到达之前过滤传递给的内容的方法。


这些使字段可以继续维护它需要的文档,同时提供过滤来自用户的输入的手段。


import java.awt.EventQueue;

import java.awt.GridBagLayout;

import javax.swing.JFrame;

import javax.swing.JPasswordField;

import javax.swing.JTextField;

import javax.swing.UIManager;

import javax.swing.UnsupportedLookAndFeelException;

import javax.swing.text.AbstractDocument;

import javax.swing.text.AttributeSet;

import javax.swing.text.BadLocationException;

import javax.swing.text.DocumentFilter;


public class LimitTextField {


    public static void main(String[] args) {

        new LimitTextField();

    }


    public LimitTextField() {

        EventQueue.invokeLater(new Runnable() {

            @Override

            public void run() {

                try {

                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {

                    ex.printStackTrace();

                }


                JTextField pfPassword = new JTextField(20);

                ((AbstractDocument)pfPassword.getDocument()).setDocumentFilter(new LimitDocumentFilter(15));


                JFrame frame = new JFrame("Testing");

                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                frame.setLayout(new GridBagLayout());

                frame.add(pfPassword);

                frame.pack();

                frame.setLocationRelativeTo(null);

                frame.setVisible(true);

            }

        });

    }


    public class LimitDocumentFilter extends DocumentFilter {


        private int limit;


        public LimitDocumentFilter(int limit) {

            if (limit <= 0) {

                throw new IllegalArgumentException("Limit can not be <= 0");

            }

            this.limit = limit;

        }


        @Override

        public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException {

            int currentLength = fb.getDocument().getLength();

            int overLimit = (currentLength + text.length()) - limit - length;

            if (overLimit > 0) {

                text = text.substring(0, text.length() - overLimit);

            }

            if (text.length() > 0) {

                super.replace(fb, offset, length, text, attrs); 

            }

        }


    }


}


查看完整回答
反对 回复 2019-11-18
  • 3 回答
  • 0 关注
  • 535 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信