【问题标题】:Limiting Length of Input in JTextField is not working限制 JTextField 中的输入长度不起作用
【发布时间】:2012-10-16 01:09:44
【问题描述】:

我正在尝试限制用户可以在文本字段中输入的字符的最大长度,但它似乎不起作用。

代码如下:

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

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

【问题讨论】:

    标签: java swing user-interface document jtextfield


    【解决方案1】:

    无需使用任何API
    只需在TextFieldKeyTyped事件上写下这段代码

    if (jTextField.getText().trim().length() == 8 || evt.getKeyChar() == java.awt.event.KeyEvent.VK_BACK_SPACE) {
            evt.consume();
        }  
    

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

    【讨论】:

    • 此方法不适用于粘贴,请使用自定义 PlainDocument
    【解决方案2】:

    只需扩展 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");
            }
        }
    }
    

    【讨论】:

    • 此方法不适用于粘贴,请使用自定义 PlainDocument
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      构造函数

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

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

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

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-29
      • 1970-01-01
      • 2021-01-21
      相关资源
      最近更新 更多