class NumberDocument
     extends PlainDocument {
   int maxLength = 16;
   int decLength = 0;
   double minRange = Double.MIN_VALUE;
   double maxRange = Double.MAX_VALUE;
   public NumberDocument(int decLen, int maxLen) {
     maxLength = maxLen;
     decLength = decLen;
   }   /**
    * @param decLen int  小数位长度
    * @param maxLen int  最大长度(含小数位)
    * @param minRange double  最小值
    * @param maxRange double  最大值
    */
   public NumberDocument(int decLen, int maxLen, double minRange,
                         double maxRange) {
     this(decLen, maxLen);
     this.minRange = minRange;
     this.maxRange = maxRange;
   }   public NumberDocument(int decLen) {
     decLength = decLen;
   }   public NumberDocument() {}   public void insertString(int offset, String s, AttributeSet a) throws
       BadLocationException {
     int len = getLength();
     String str = getText(0, len);
     int decPos = str.indexOf(".");
     if (
         s.equals("F") || s.equals("f") || s.equals("D") || s.equals("d")
         || (str + s).length() > maxLength
         ||
         (decPos > -1 && offset > decPos &&
          ( (str.substring(decPos + 1)) + s).length() > decLength)
         ||
         (str.trim().equals("0") && !s.substring(0, 1).equals(".") &&
          offset != 0)
         || (s.equals(".") && decLength == 0)
         ||
         (s.indexOf(".") > -1 &&
          s.substring(s.indexOf(".") + 1).length() > decLength)
         ) {
       Toolkit.getDefaultToolkit().beep();
       return;
     }
     try {
       str = str.substring(0, offset) + s + str.substring(offset, len);
       if (!str.equals("-") || (str.equals("-") && minRange <= 0)) {
         double d = Double.parseDouble(str);
         if (d < minRange || d > maxRange)
           throw new Exception();
       }
     }
     catch (Exception e) {
       Toolkit.getDefaultToolkit().beep();
       return;
     }
     super.insertString(offset, s, a);
   } }

解决方案 »

  1.   

    http://blog.csdn.net/gdsean/archive/2002/07/03/6329.aspx
      

  2.   

    import javax.swing.*;
    import javax.swing.text.*;/**
     * 功能:数字输入实现类
     *
     */
    public class NumberField extends JTextField
    {
    public NumberField(int cols) 
    {
    super(cols);
    }
    /**
     * 功能:创建一个数字文档实体
     *
     */
    protected Document createDefaultModel() 
    {
    return new NumberDocument();
    }
    static class NumberDocument extends PlainDocument 
    {
    /**
     * 功能:把指定的str中的非数字的字符过滤掉
     *
     */
    public void insertString(int offs, String str, AttributeSet a) throws BadLocationException 
    { if (str == null) 
    {
    return;
    }
    String newString="";
    char[] upper = str.toCharArray();
    for (int i = 0; i < upper.length; i++) 
    {
    if(upper[i]>='0'&&upper[i]<='9')
    {
    newString+=upper[i];
    }
    }
    super.insertString(offs, newString, a);
    }
    }
    }