码迷,mamicode.com
首页 > 其他好文 > 详细

TextField限制输入长度

时间:2015-05-06 18:03:29      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:textfield   java   限制长度   

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~







TextField限制输入长度

标签:textfield   java   限制长度   

原文地址:http://blog.csdn.net/huai814586181/article/details/45535843

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!