Java 的事件机制不是这样的,你需要 addKeyListener不过你为什么不使用 javax.swing.JFormattedTextField 呢?

解决方案 »

  1.   

    import javax.swing.*;
    import javax.swing.text.*;
    import javax.swing.event.*;
    import java.awt.*;
    import java.awt.event.*;
    public class MyTextField extends JTextField
    {
       public MyTextField()
       {
         super();
       }
        public MyTextField(int len)
       {
         super(len);
       }
        public MyTextField(String str_text,int len)
       {
         super(str_text,len);
       }
      protected Document createDefaultModel() {
        return new NumberOnlyDocument();
      } static class NumberOnlyDocument extends PlainDocument
     {
       public void insertString(int offs, String str, AttributeSet a)
       throws BadLocationException
       {
         if (str == null) 
     {
           return;
          }
         char[] upper = str.toCharArray();
         int length=0;
         for (int i = 0; i < upper.length; i++)
     {
           if (upper[i]>='0'&&upper[i]<='9')
       {
              upper[length++] = upper[i];
           }
         }
         super.insertString(offs, new String(upper,0,length), a);
       }
     }
     }也可以考虑JFormattedTextField   两者实现的结果应该差不多的
      

  2.   

    String s=…;
    String s1="";
    for(int i=0;i<s.length();i++){
      if((s.charAt(i)>'0')||(s.charAt(i)<'9')){
        s1=s1+s.charAt(i);
      }
      else{………}
    }
      

  3.   

    if (newStr.length() > oldStr.length()) {
    String resultStr = newStr.substring(oldStr.length(), newStr
    .length());
    Pattern p=Pattern.compile(REGX);
    Matcher m=p.matcher(resultStr);
    if(m.find()){
    text.setText(newStr);
    }
    else{
    text.setText(oldStr);
    }
    }
      

  4.   

    重写控件 JTextField 的方法 setText 可以使用 StringBuffer 来一步一步验证