求高手帮忙啊
重写JTextField控件,只能在JTextField中输入数字 用正则表达式

解决方案 »

  1.   

    LZ不妨参考下这个.
    try   
      {   
            MaskFormatter   formatter=new   MaskForamtter("###-#######");   
            formatter.setPlaceholderCharacter('0');   
            JFormattedTextField   ftField=new   JFormattedTextField(formatter);   
            ftField.setValue("012-3456789");   
          ........   
      }catch(ParseException   e){e.printStackTrace();}
      

  2.   

    如果你只是限制输入数字的话,用不着RE啊,简单地用Integer.parse不就ok啦?
      

  3.   

    如果你非要用JTextField,也有很多方法,比如:
    使用自定义的Document、用InputVerifier、用Document Filter。
    可以参考 这里
      

  4.   

    参考一下这个吧
    import java.awt.Dimension;
    import java.awt.event.KeyAdapter;
    import java.awt.event.KeyEvent;
    import javax.swing.JFrame;
    import javax.swing.JTextField;
    public class test1 extends JFrame {
    public test1(){
    this.setLayout(null);
    this.setSize(new Dimension(400,200));
    JTextField txt=new JTextField();
    txt.addKeyListener(new   KeyAdapter(){   
      public   void   keyTyped(KeyEvent   e){   
      char   c   =   e.getKeyChar();   
      if(Character.isDigit(c)   ||   c==KeyEvent.VK_BACK_SPACE   ||   c==KeyEvent.VK_DELETE)   
      return;   
      e.consume();   
      }       
      });
      txt.setBounds(50, 50, 120, 20);
      this.add(txt);
      this.setVisible(true);}
    public static void main(String args[]){
    new test1();
    }
    }
      

  5.   

    这个可以直接拿去用import java.awt.Toolkit;import javax.swing.JTextField;
    import javax.swing.text.AttributeSet;
    import javax.swing.text.BadLocationException;
    import javax.swing.text.Document;
    import javax.swing.text.PlainDocument;/**
     * 只允许输入数字的JTextField
     * @author 003
     */
    public class JNumberField extends JTextField
    {
    /**
     * serialVersionUID
     */
    private static final long serialVersionUID = -2732387087480277531L; /**
     * 最大值
     */
    private int maxValue = Integer.MAX_VALUE; /**
     * 最小值
     */
    private int minValue = Integer.MIN_VALUE; /**
     * 宽度
     */
    private int maxLength = 0; /**
     * 构造方法 最大宽度
     * @param maxLength
     */
    public JNumberField(int maxLength)
    {
        this(maxLength, Integer.MIN_VALUE, Integer.MAX_VALUE);
    } /**
     * 构造方法
     * @param minValue 最小值
     * @param maxValue 最大值
     */
    public JNumberField(int minValue, int maxValue)
    {
        this(0, minValue, maxValue);
    }

    /**
     * 构造方法
     * @param maxLength 最大宽度
     * @param minValue 最小值
     * @param maxValue 最大值
     */
    public JNumberField(int maxLength, int minValue, int maxValue)
    {
    super();
    this.maxLength = maxLength;
    this.minValue = minValue;
    this.maxValue = maxValue;
    } /**
     * 设置最大值
     * @param maxValue 最大值
     */
    public void setMaxValue(int maxValue)
    {
    this.maxValue = maxValue;
    } /**
     * 获取最大值
     * @return 最大值
     */
    protected int getMaxValue()
    {
    return this.maxValue;
    } /**
     * 设置最小值
     * @param minValue 最小值
     */
    public void setMinValue(int minValue)
    {
    this.minValue = minValue;
    } /**
     * 获取最小值
     * @return 最小值
     */
    protected int getMinValue()
    {
    return this.minValue;
    } /**
     * 获取当前值
     * @return 当前值
     */
    public int getValue()
    {
    int retVal = 0; try
    {
    retVal = Integer.parseInt(getText()); if(retVal > maxValue)
    {
    retVal = maxValue;
    }
    else if(retVal < minValue)
    {
    retVal = minValue;
    }
    }
    catch(NumberFormatException e)
    {
    retVal = 0;
    } return (new Integer(retVal)).intValue();
    } /**
     * 设置当前值
     * @param value 当前值
     */
    public void setValue(Object value)
    {
    if(value == null || value.equals(""))
    {
    setText("0");
    }
    else
    {
    setText(value.toString());
    }
    } /**
     * 创建缺省模板
     */
    protected Document createDefaultModel()
    {
    return new NumberDocument(this);
    } /**
     * 文本控制类
     * @author 003
     */
    protected class NumberDocument extends PlainDocument
    {
    /**
     * serialVersionUID
     */
    private static final long serialVersionUID = -5643002098563548951L; /**
     * NumberField对象
     */
    JNumberField field; /**
     * 构造方法 
     * @param field NumberField对象
     */
    public NumberDocument(JNumberField field)
    {
    this.field = field;
    } /**
     * 插入规则
     */
    public void insertString(int offs, String str, AttributeSet a) throws BadLocationException
    {
    if(str == null || str.equals(""))
    {
    return;
    } char[] source = str.toCharArray();
    char[] result = new char[source.length]; int j = 0; for(int i = 0; i < result.length; i++)
    {
    if(Character.isDigit(source[i]))
    {
    result[j++] = source[i];
    }
    else
    {
    Toolkit.getDefaultToolkit().beep();
    }
    } StringBuffer sb = new StringBuffer();
    sb.append(field.getText());
    sb.insert(offs, new String(result, 0, j)); try
    {
    int value = Integer.parseInt(sb.toString());

    boolean flag1 = maxLength > 0 && this.getLength() < maxLength && value <= field.getMaxValue() && value >= field.getMinValue();
    boolean flag2 = maxLength == 0 && value <= field.getMaxValue() && value >= field.getMinValue();

    if(flag1 || flag2)
    {
    super.insertString(offs, new String(result, 0, j), a);
    }
    }
    catch(NumberFormatException ex)
    {}
    }
    }
    }