Limiting Length of Input in JTextField is not working

…衆ロ難τιáo~ 提交于 2019-12-06 00:32:51

问题


I am trying to limit the max length of character a user can input in a textfield but It seems to be not working.

Here is the code:

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

Is there anything I am doing wrong? How can I make the limit to work properly?


回答1:


The constructor

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

sets the number of visible columns to 8 but doesn't restrict you from entering more.

You could use a DocumentFilter to restrict the input length.




回答2:


You current code is not setting the maximum length, rather it is defining the number of visible columns.

To restrict the maximum length of the data, you can set a custom Document for the text field that does not permit additions that break the maximum length restriction:

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

Then set your text field to use this document:

text2.setDocument(new LengthRestrictedDocument(8));



回答3:


Simply extend the JTextField Class and override the KeyReleased event in the constructor and point it on a new method that checks the length:

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



回答4:


No need to use any API
Simply write this code on TextFieldKeyTyped event

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


来源:https://stackoverflow.com/questions/13075564/limiting-length-of-input-in-jtextfield-is-not-working

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!