今天在做java大作业时需要使用一个jtextfield的组件输入账号,但是要求账号只能输入数字与字母,上网查阅资料后发现可以通过重写PlainDocument类里的insertString来达到目的
package com.wind.util;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;
/**
* 只能输入数字与字母工具类
*/
public class NumberTextField extends PlainDocument {
private int limit;
public NumberTextField(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) {
char[] upper = str.toCharArray();
int length=0;
for (int i = 0; i < upper.length; i++) {
//限制在0-9 和 'A' - 'z'中的ascii码
if (upper[i]>='0' && upper[i]<='9' || (upper[i]>='A' && upper[i]<='z')){
upper[length++] = upper[i];
}
}
super.insertString(offset, new String(upper,0,length), attr);
}
}
}
设置jtextfield可加上这行代码idField.setDocument(new NumberTextField(15)); //15是限制输入长度