我在一个JTextField里面的KeyPress事件当中,加入如下的代码:
        boolean b;
        b=Pattern.matches("\\d|\b",""+evt.getKeyChar());
        if(!b)
            grade.setEditable(false);
        else
            grade.setEditable(true); 
就是实现不能在 JTextField里面输入其它的非数字字符,但是我觉得这个方法有点不好就是输入的时候不太方便,给用户造成一定视觉错误,请问有没有更好的方法来解决这个问题,比如就像在VB当中可以写成:如果是其它不合法字符的话,就执行keyascii=0,也就是空操作,那在java当中如何实现类似功能的代码呢?

解决方案 »

  1.   

    继承PlainDOCUMENT 
    重载insertString
    如果不是数字 就return
    是数字就调用super。insertString()然后在new JTextField(myDocument,X,X);
      

  2.   

    用keypressed来实现肯定是不可取得,简单的一个例子:解决不了复制粘贴的限制,如果你限制用户不能用键盘输入“1”,但还是可以通过复制粘贴来输入“1”。
    所以java中有PlainDocument这个类,自己写一个继承自PlainDocument的类,覆盖insertString方法,new JTextField(myDocument,X,X)就行了