黑马程序员技术交流社区

标题: GUI文本框输入字符判断 [打印本页]

作者: 聂斌    时间: 2013-3-7 12:41
标题: GUI文本框输入字符判断
public class KeyEventt {

        private Frame f;

        private TextField tf;

        KeyEventt()
        {
                init();
        }

        public void init()
        {
                f = new Frame("my frame");

                f.setBounds(300,100,600,500);
                f.setLayout(new FlowLayout());
               
               
                tf = new TextField(20);                //TextField是文本框
               
                f.add(tf);

                myEvent();

                f.setVisible(true);

        }
       
        private void myEvent()
        {
               
                f.addWindowListener(new WindowAdapter()
                {
                        public void windowClosing(WindowEvent e)
                        {
                                System.exit(0);
                        }
                });
               
                //在文本框上注册了一个键盘监听,通过判断键盘输入的字符来判断你输入的是不是数字
                tf.addKeyListener(new KeyAdapter() {
                        public void keyPressed(KeyEvent e){
                                int code = e.getKeyCode();
                                if(!(code>=KeyEvent.VK_0 && code<=KeyEvent.VK_9))//code>=KeyEvent.VK_0:你输入的那个键盘值>=0
                                {
                                        System.out.println(code+".....是非法的");
                                        e.consume();
                                }
                        }
                });

        }


        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                new KeyEventt();
        }


}


代码的运行效果:
当你往文本框里面输入字符时,如果输入的不是数字他就不把字符输入到文本框里了,,文本框里面只有数字

问题:
int code = e.getKeyCode();
if(!(code>=KeyEvent.VK_0 && code<=KeyEvent.VK_9)) 这里判断时我为什么不能写code>=0&& code<=9     ?????

我对这句话code>=KeyEvent.VK_0 的理解是:
code是我按下键盘后返回的键盘码,比如你按下ENTER键,那么code就是27,,,之后拿这27和KeyEvent.VK_0 比较,,,,KeyEvent.VK_0 返回的是0,,,,VK_0 里的0对应的ascll码是0,,,
那么我为什么不能拿27和0直接比呢,,而是27和KeyEvent.VK_0 比,,,

我还有一种想法:就是通过e.getKeyText(e.getKeyCode())方法获取到键盘的文本信息,然后判断获取到的文本信息是不是数字,,,下面代码

                    String s=e.getKeyText(e.getKeyCode());
                                int i=Integer.valueOf(s);
                                if (!(i>=0 && i<=9)) {
                                        System.out.println("你输入的字符是非法的");
                                        e.consume();
                                }

但是问题来了,,,我这样写后,,,我按下键盘e时由于 String s= 'e',,,所以int i=Integer.valueOf(s); 就报转换类型异常了,,,那么这里又改如何处理,,






作者: 聂斌    时间: 2013-3-7 15:55
呵呵第一个问题可以解决




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