TextField中,我们需要设置它的输入长度,但是呢?JAVA中没有给出具体的方法,那么只好自己来写一个了。
对于TextField的对象,给它增加一个事件监听,每当从键盘敲入一个字符时,就对它的长度进行判断,如果长度达到某一条件,则无法继续输入(通过consume方法实现)。
public void keyTyped(KeyEvent e) { // TODO Auto-generated method stub String s = textField.getText(); if(s.length() >= 8) e.consume(); }经过测试,在keyReleased方法和keyPressed方法中调用consume方法无法实现该效果。
先来介绍一下这个consume方法,该方法是用来销毁实例的。在上述代码中,当s的长度大于等于8时,就销毁多出来的字符了,从而达到了限制输入长度的效果。
我测试了一下,当我按下一个按键时,首先调用的是keyPressed方法,然后再将键入的字符显示到TextField文本框中,最后再调用keyReleased方法。
也就是说,如果我在keyPressed中调用consume方法,它就无法做到限制字符输入长度的效果,因为文本框中的字符是在我进行完keyPressed方法后显示的。
同样的,为什么在keyRelease中也不行呢?我是这样认为的(不知道对不对),在调用keyPressed后,字符就立刻显示到了文本框中,但是此时还没有调用keyReleased方法,所以同样达不到通过consume方法来限制输入长度的效果。
以上都是个人观点,至于对不对我也不知道,我百度了好久也没找到这方面的资料。
关于这类问题,还有一种通过调用setDocument方法,参数是继承PlainDocument的类对象,并且在该类中重写insertString方法,代码如下:
public class JTextFieldLimit extends PlainDocument { private int limit; //限制的长度 public JTextFieldLimit(int limit) { 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);//调用父类方法 } } }
THE END~
原文地址:http://blog.csdn.net/huai814586181/article/details/45535843