黑马程序员技术交流社区

标题: TextField加键盘监听事件为什么错 [打印本页]

作者: 李建雄    时间: 2011-10-27 00:58
标题: TextField加键盘监听事件为什么错
我用的是myeclipse  为什么一加红色字部分的代码,就报错?


import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.TextField;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;


public class KeyEventDemo {
        private Frame f;
        private TextField tf;
        KeyEventDemo(){
                init();
        }
        public void init(){
                f=new Frame("MyFrame");
                TextField tf=new TextField(50);
                f.setBounds(300, 100, 600, 400);
                f.setLayout(new FlowLayout());
               
                f.add(tf);
                myEvent();
               
                f.setVisible(true);
        }
        public void myEvent(){
               
                f.addWindowListener(new WindowAdapter() {
                        @Override
                        public void windowClosing(WindowEvent e) {
                                // TODO Auto-generated method stub
                                super.windowClosing(e);
                                System.exit(0);
                        }
                       
                });
               
               
                tf.addKeyListener(new KeyAdapter() {

                        @Override
                        public void keyPressed(KeyEvent e) {
                                int code=e.getKeyCode();
                                if(!(code>=KeyEvent.VK_0&&code<=KeyEvent.VK_9)){
                                        System.out.println("非法");
                                }
                        }
                       
                });
               
        }
        public static void main(String[] args) {
                new KeyEventDemo();

        }

}
作者: olkldksl    时间: 2011-10-27 07:23
空指针异常,因为给tf加监听器的时候tf对象还没初始化,可以把 tf.addKeyListener(new KeyAdapter() 操作放到init()里面,或者在开头的时候给tf初始化一下
作者: olkldksl    时间: 2011-10-27 07:26
空指针异常,因为在给tf加监听器的时候tf还没被实例化,可以把 tf.addKeyListener(new KeyAdapter() 操作放到init()里面,或者在开头给tf初始化
作者: 黄健    时间: 2011-10-27 09:32
可能是手误吧

public class KeyEventDemo {
        private Frame f;
        private TextField tf;//此变量一直都未赋值,一直都是null,所以下面监听访问它的方法时报空指针异常
        KeyEventDemo(){
                init();
        }
        public void init(){
                f=new Frame("MyFrame");
               
                /*TextField*/ tf=new TextField(50);//此tf变量是局部变量,方法执行完就没有了。把TextField注释掉,就正常了
                f.setBounds(300, 100, 600, 400);
                f.setLayout(new FlowLayout());
               
                f.add(tf);
                myEvent();
               
                f.setVisible(true);
        }
作者: 李建雄    时间: 2011-10-27 16:19
谢谢,楼上!!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2