/**
 * JNumTextField.java
 *
 * Created on 2006年4月23日, 下午7:54
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */package org.firebug;import java.awt.BorderLayout;import javax.swing.JTextField;
import java.awt.event.KeyEvent;
import java.awt.event.KeyAdapter;
import java.awt.Dimension;/**
 * <p>Title: 整数输入框</p>
 *
 * <p>Description: 该组件继承于JTextField,只能接受整数输入,不能是实数,即最小值为Integer.MIN_VALUE,最大值为Integer.MAX_VALUE。</p>
 * <p>当输入值小于指定的最小值时,当前值取该最小值;当输入值大于指定的最大值时,当前值取该最大值。</p>
 * <p>当输入值为无效的整数格式时,当前值不改变。</p>
 * <p>Copyright: Copyright (c) 2006</p>
 *
 * <p>Company: firebug工作室</p>
 *
 * <p>author firebug</p>
 * <p>version 1.0</p>
 */
public class JNumTextField extends JTextField
{
    BorderLayout borderLayout1 = new BorderLayout();
    
    private int minValue=Integer.MIN_VALUE;
    private int maxValue=Integer.MAX_VALUE;
    private int curValue=0;
    Dimension dimension1 = this.getMaximumSize();
    /**
     *value表示当前值   
     *最大值默认为Integer.MAX_VALUE   
     *最小值默认为Integer.MIN_VALUE   
     */
    public JNumTextField(int value)
    {
        super(String.valueOf(value));
        
        try
        {
            jbInit();
            this.setCurValue(value);
            //this.setText(String.valueOf(value));
        }
        catch (Exception exception)
        {
            exception.printStackTrace();
        }
    }
    /**
     *当前值默认为0  
     *最大值默认为Integer.MAX_VALUE  
     *最小值默认为Integer.MIN_VALUE  
     */
    public JNumTextField()
    {
        this(0);
    }
    
    private void jbInit() throws Exception
    {
        setLayout(borderLayout1);
        this.addKeyListener(new java.awt.event.KeyAdapter()
        {
            public void keyTyped(KeyEvent e)
            {
                jNumTextField_keyTyped(e);
            }
            public void keyReleased(KeyEvent e)
            {
                jNumTextField_keyReleased(e);
            }
        });
        this.addFocusListener(new java.awt.event.FocusAdapter()
        {
            public void focusLost(java.awt.event.FocusEvent evt)
            {
                jNumTextFieldFocusLost(evt);
            }
        });
       
    }
    
    private void jNumTextFieldFocusLost(java.awt.event.FocusEvent evt)
    {
        // TODO 将在此处添加您的处理代码:
        try
        {
            if (Integer.parseInt(this.getText())>maxValue)
            {
                curValue=maxValue;
            }
            else
            {
                if (Integer.parseInt(this.getText())<minValue)
                {
                    curValue=minValue;
                }
                else
                {
                    curValue=Integer.parseInt(getText());
                }
            }
        }
         catch(NumberFormatException e)
        {
             //do Nothing;
        }
        finally
        {
            this.setText(String.valueOf(curValue));
        }
    }
    /**
     *返回当前值
     */
    public int getCurValue()
    {
        return curValue;
    }
    /**
     *返回最大值
     */
    public int getMaxValue()
    {
        return maxValue;
    }
    /**
     *返回最小值
     */
    public int getMinValue()
    {
        return minValue;
    }
    /**
     *设置当前值,当value大于最大值或小于最小值时,抛出NumberOverFlowException异常
     */
    public void setCurValue(int value)throws NumberOverFlowException
    {
        if (value>maxValue)
        {
            throw new NumberOverFlowException("输入值不能超过最大值");
        }
        else
        {
            if (value<minValue)
            {
                throw new NumberOverFlowException("输入值不能小于最小值");
            }
            else
            {
                curValue=value;
                setText(String.valueOf(curValue));
            }
        }
    }
    /**
     *设置最大值,当value小于最小值时,抛出NumberOverFlowException异常
     */
    public void setMaxValue(int value)throws NumberOverFlowException
    {
        if (value<minValue)
        {
            throw new NumberOverFlowException("最大值不能小于最小值");
        }
        else
        {
            this.maxValue=value;
            if (this.getCurValue()>value)
            {
                this.setCurValue(value);
                setText(String.valueOf(curValue));
            }
        }
    }
    /**
     *设置最小值,当value大于最大值时,抛出NumberOverFlowException异常
     */
    public void setMinValue(int value)throws NumberOverFlowException
    {
        if (value>maxValue)
        {
            throw new NumberOverFlowException("最小值不能大于最大值");
        }
        else
        {
            this.minValue=value;
            if (this.getCurValue()<value)
            {
                this.setCurValue(value);
                setText(String.valueOf(curValue));
            }
        }
    }
    
    private void jNumTextField_keyTyped(KeyEvent evt)
    {
        // TODO 将在此处添加您的处理代码:
        if (!Character.isDigit(evt.getKeyChar()))
        {
            if (evt.getKeyChar()!='-')
            {
                evt.setKeyChar('\u0000');
            }
        }
        
        
    }
    private void jNumTextField_keyReleased(KeyEvent evt)
    {
        
    }
}class NumberOverFlowException extends Exception
{
    public  NumberOverFlowException(String s)
    {
        super(s);
    }
    
}