JAVA之JTextField限制输入长度

JTextField中,我们需要设置它的输入长度,但是呢?JAVA中没有给出具体的方法,那么只好自己来写一个了。

这里先给出第一种方法:

对于JTextField的对象,给它增加一个事件监听,每当从键盘敲入一个字符时,就对它的长度进行判断,如果长度达到某一条件,则无法继续输入(通过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方法,然后再将键入的字符显示到JTextField文本框中,最后再调用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~







你可能感兴趣的:(Java,限制长度,JAVA,JTextField)