package com.ethon.ui;

import javax.swing.JTextField;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

/**
 * 只允许输入int数据的输入框
 * @author ethonchan	ethonchan@gmail.com
 *
 */
public class IntTextField extends JTextField {
	private static final long serialVersionUID = 1L;
	/**
	 * 该输入框中允许输入的最小值
	 */
	private int min;
	
	/**
	 * 新建一个输入框对象
	 * @param max	输入框中允许输入的最小值
	 */
	public IntTextField(int min){
		super();
		this.min=min;
		this.setDocument(new IntDocument());
	}

	/**
	 * 输入框的document对象，只允许输入int
	 * @author <a href="mailto:ethonchan@gmail.com">ethonchan</a>
	 *
	 */
	class IntDocument extends PlainDocument{
		private static final long serialVersionUID = 1L;

		/**
		 * 重写父类的insertString方法
		 */
		public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
			if (isNumber(str)) {//首先检验是否是数字
				String before=IntTextField.this.getText();
				String after=before.substring(0, offs)+str+before.substring(offs);
				
				if(!after.matches("[0-9]*"))		return;//包含多个小数点
				
				
				Integer value=Integer.parseInt(after);
				if(value<min)	return;//输入的数值超过最大值
								
				super.insertString(offs, str, a);
			}
		}
		
		/**
		 * 判断一个字符串是否只包含数字
		 * @param str	需要进行判断的字符串
		 * @return	是则返回true，否则返回false
		 */
		boolean isNumber(String str){
			if(str==null||str.trim().length()==0)	return false;
			
			for(int i=0;i<str.length();i++){
				char a=str.charAt(i);
				
				if(a>='0'&&a<='9')	return true;				
			}
			return false;
		}
	}
}
