/**
* 方式一:通过添加键盘事件,判断键入的是否为数字 aacc
* 不足:通过 复制粘贴 的方式可以写入英文字母
*/
JTextField textField = new JTextField();
textField.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
int temp = e.getKeyChar();
System.out.println(temp);
if(temp == 10){//按回车时
}else if(temp != 46){ //没有按小数点时
if(temp != 8){ //没有按backspace时
//下面检查是不是在0~9之间;
if(temp > 57){
e.consume(); //如果不是则消除key事件,也就是按了键盘以后没有反应;
}else if(temp < 48){
e.consume();
}
}
}
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
}
});
//方式二:下面是个工具类,实现的是限制文本框输入的“最大长度”和输入的“字符类型”
package utils;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;
/**
* JTextField jTextField = new JTextField();
* 使用时:
* LimitedDocument ld = new LimitedDocument(8);//参数为能输入的最大长度
* ld.setAllowChar("0123456789");//只能输入的字符
* jTextField.setDocument(ld);//运用到文本框中
*
* 不足:通过 复制粘贴 的方式可以写入英文字母
* @author WJ
*
*/
@SuppressWarnings("serial")
public class LimitedDocument extends PlainDocument {
private int _maxLength = -1;
private String _allowCharAsString = null;
public LimitedDocument(){
super();
}
public LimitedDocument( int maxLength ){
super();
this._maxLength = maxLength;
}
public void insertString( int offset, String str, AttributeSet attrSet) throws BadLocationException{
if(str == null) {
return;
}
if(_allowCharAsString != null && str.length() == 1) {
if(_allowCharAsString.indexOf(str) == -1){
return;
}
}
char[] charVal = str.toCharArray();
String strOldValue = getText(0, getLength());
byte[] tmp = strOldValue.getBytes();
if(_maxLength != -1 && (tmp.length + charVal.length > _maxLength)){
return;
}
super.insertString(offset, str, attrSet);
}
public void setAllowChar(String str) {
_allowCharAsString = str;
}
}