限制JTextField只能输入数字以及输入最大长度

/**
 * 方式一:通过添加键盘事件,判断键入的是否为数字 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;
    }
}


你可能感兴趣的:(java,swing)