import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
class test 
{
    private Frame f;
        private TextField tf;    test()
    {
        init();
    }    public void init()
    {
        f = new Frame("my frame");        f.setBounds(300,100,600,500);
        f.setLayout(new FlowLayout());        tf = new TextField(20);
        
        f.add(tf);
    
        myEvent();        f.setVisible(true);    }
    private void myEvent()
    {
        tf.addKeyListener(new KeyAdapter()
        {
            public void keyPressed(KeyEvent e)
            {
                int code = e.getKeyCode();
                if(!(code>=KeyEvent.VK_0 && code<=KeyEvent.VK_9))
                {
                    System.out.println(code+".....是非法的");
                    e.consume();
                }
            }
        });
    }    public static void main(String[] args) 
    {
        new test();
    }
}
//这是个只能输入数字不能输入字母的代码,但是上面的TextFiel改成JTextField后,字母就能输入了,也就是说监听无效了,为什么?TextField JTextField  

解决方案 »

  1.   

    使用keyTyped这个方法。或者把keyReleased也重写了
      

  2.   

    用keyTyped练数字都不能输入了
      

  3.   

    我估计是e.consume();有问题, e是java.awt.event.KeyEvent中的,但是javax.swing.event下面没有对应的KeyEvent,但是也找不到可以提替代的。
      

  4.   

    如果你用JTextField那么使用Jframe应该就没有问题了,你可以查看下java的api看下二者的区别,使用J**比较好的,你可以试试
      

  5.   

    不管其他组件怎么改,用TextField就正常,用JTextField就功能失效。目前还是没有解决啊。
      

  6.   

    JTextField应该使用一个定制的Document
      

  7.   

    一个是awt中的 一个是swing中的,相应怎么用到api中查
      

  8.   

    就是查不到 才问的啊。javax.swing.event下面没有对应的KeyEvent