黑马程序员技术交流社区

标题: 关于第八节GUI键盘事件的问题 [打印本页]

作者: 陈雪琪    时间: 2013-6-6 12:17
标题: 关于第八节GUI键盘事件的问题
本帖最后由 陈雪琪 于 2013-6-6 20:08 编辑
  1. import java.awt.*;
  2. import java.awt.event.*;


  3. class MouseAndKeyEvent
  4. {
  5.         private Frame f;
  6.         private Button but;
  7.         private TextField tf;

  8.         MouseAndKeyEvent()
  9.         {
  10.                 init();
  11.         }

  12.         public void init()
  13.         {
  14.                 f = new Frame("my frame");

  15.                 f.setBounds(300,100,600,500);
  16.                 f.setLayout(new FlowLayout());

  17.                 tf = new TextField(20);

  18.                 but = new Button("my button");
  19.         
  20.                 f.add(tf);
  21.                 f.add(but);


  22.                 myEvent();

  23.                 f.setVisible(true);

  24.         }
  25.         private void myEvent()
  26.         {
  27.                 f.addWindowListener(new WindowAdapter()
  28.                 {
  29.                         public void windowClosing(WindowEvent e)
  30.                         {
  31.                                 System.exit(0);
  32.                         }
  33.                 });


  34.                 tf.addKeyListener(new KeyAdapter()
  35.                 {
  36.                         public void keyPressed(KeyEvent e)
  37.                         {
  38.                                 int code = e.getKeyCode();
  39.                                 if(!(code>=KeyEvent.VK_0 && code<=KeyEvent.VK_9))
  40.                                 {
  41.                                         System.out.println(code+".....是非法的");
  42.                                         e.consume();
  43.                                 }


  44.                         }
  45.                 });

  46.                 //给But添加一个键盘监听。
  47.                 but.addKeyListener(new KeyAdapter()
  48.                 {
  49.                         public void keyPressed(KeyEvent e)
  50.                         {        
  51.                                 if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER)
  52.                                         //System.exit(0);
  53.                                 System.out.println("ctrl+enter is run");

  54.                                 //System.out.println(KeyEvent.getKeyText(e.getKeyCode())+"...."+e.getKeyCode());
  55.                         }
  56.                 });
  57.         }
  58.         public static void main(String[] args)
  59.         {
  60.                 new MouseAndKeyEvent();
  61.         }
  62. }
复制代码
这个是毕老师视频里面的代码。

第一个问题:
因为我笔记本打字用的不是笔记本上面的键盘,而是类似于台式电脑的那种键盘,所以右边是有一小片数字的。不知道为什么运行老毕的代码后,我在文本域中输的是右边那一小片数字时,会显示是非法的,获取的code值输入数字1输出为:97...是非法的。
纠结,这一小片数字和字母上面的一排数字有什么区别?{:soso_e136:}

第二个问题:
经过测试,我发现这段代码,在文本域中是可以输入中文的,而且英文也可以输入进去{:soso_e101:},(用的搜狗拼音,中文状态下输入字母a,然后按shift键,然后a字母就输入进去了。。。)

纠结,不知道是不是钻牛角尖了,求指教!!


好吧。鉴于好久没人回,在第二十期板块发了这个贴。。


作者: 风乐    时间: 2013-6-6 14:01
本帖最后由 风乐 于 2013-6-6 14:03 编辑

有意思,想想看
作者: 风乐    时间: 2013-6-6 14:01
本帖最后由 风乐 于 2013-6-6 14:02 编辑

import java.awt.*;
import java.awt.event.*;


class MouseAndKeyEvent
{
        private Frame f;
        private Button but;
        private TextField tf;

        MouseAndKeyEvent()
        {
                init();
        }

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

                f.setBounds(300,100,600,500);
                f.setLayout(new FlowLayout());

                tf = new TextField(20);

                but = new Button("my button");
        
                f.add(tf);
                f.add(but);


                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();
/*显然这一句是判断是否非法的语句,判断依据是键盘信号的unicode码,小键盘和主键盘的数字生成的unicode码不同,判断语句中只判断了主键盘的数字区域
至于第二个问题,因为判断非法与否是通过直接接收的键盘信号判断的,用了输入法的话等于把信号拦截一下再输送给监听期,输入法给监听器的信号是怎样的就不晓得了
*/

                                if(!(code>=KeyEvent.VK_0 && code<=KeyEvent.VK_9))
                                {
                                        System.out.println(code+".....是非法的");
                                        e.consume();
                                }


                        }
                });

                //给But添加一个键盘监听。
                but.addKeyListener(new KeyAdapter()
                {
                        public void keyPressed(KeyEvent e)
                        {        
                                if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER)
                                        //System.exit(0);
                                System.out.println("ctrl+enter is run");

                                //System.out.println(KeyEvent.getKeyText(e.getKeyCode())+"...."+e.getKeyCode());
                        }
                });
        }
        public static void main(String[] args)
        {
                new MouseAndKeyEvent();
        }
}

作者: 陈雪琪    时间: 2013-6-6 15:32
风乐 发表于 2013-6-6 14:01
import java.awt.*;
import java.awt.event.*;

解释的好专业的感觉~~~
信号拦截。。嗯嗯  应该就是这个原因造成的。这算不算是一个小Bug嘞?以后得注意下了。。还有一句:谢谢指点!~~




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