A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 聂斌 中级黑马   /  2013-3-7 12:16  /  1462 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class KeyEventt {

        private Frame f;
        private Button but;
       

        KeyEventt()
        {
                init();
        }

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

                f.setBounds(300,100,600,500);
                f.setLayout(new FlowLayout());
                but = new Button("my button");
                f.add(but);


                myEvent();

                f.setVisible(true);

        }
       
        private void myEvent()
        {
               
                f.addWindowListener(new WindowAdapter()
                {
                        public void windowClosing(WindowEvent e)
                        {
                                System.exit(0);
                        }
                });
               
                //在按钮上注册了一个键盘监听,我按下键盘时当前事件源那个键盘监听就被触发了,按钮是事件源
       
                but.addKeyListener(new KeyAdapter() {                        
                        public void keyPressed(KeyEvent e)
                        {                                                                       
                                //
                               
                                if (e.getKeyCode()==e.VK_ENTER && e.isControlDown()) {        //如果你按下了Control键并且e.getKeyCode()的值==e.VK_ENTER
                                        System.out.println("crtl+enter运行了");
                        }
                       

                });


        }


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


}

代码的运行效果是:
当我按住Control键再敲回车键ENTER 时,,就输出字符串"crtl+enter运行了",,就是按下crtl+enter组合键输出 "crtl+enter运行了"


问题:

e.getKeyCode()==e.VK_ENTER && e.isControlDown() 这句话怎么理解,,,

我的理解是 :e.getKeyCode()==e.VK_ENTER 是你按下的键盘,的键盘码是e.VK_ENTER ,,,而e.VK_ENTER 的键盘码是27,,这个号理解,,,但是e.isControlDown() 是判断你按下的键盘是否是Control 键....我的疑惑是,,,我首先按下的是Control 键然后按下ENTER键 ,那么 e.getKeyCode() 获取的键盘码是Control 键. 的键盘码还是ENTER 键的键盘码,,,这个我一直想不通,,,








评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 鼓励鼓励

查看全部评分

4 个回复

倒序浏览
应该是ENTER键的键盘码,你为你只重写了keyPressed这个方法,也就说明你只监听到用户按下的操作。
当你首先按下的是Control 键然后按下ENTER键,这时会执行两次keyPressed这个方法。
回复 使用道具 举报
袁见 发表于 2013-3-7 12:28
应该是ENTER键的键盘码,你为你只重写了keyPressed这个方法,也就说明你只监听到用户按下的操作。
当你首先 ...

按下Control 键后我还没释放这个键的,,再按下ENTER键他会再次执行keyPressed这个方法,,,
回复 使用道具 举报
聂斌 发表于 2013-3-7 12:43
按下Control 键后我还没释放这个键的,,再按下ENTER键他会再次执行keyPressed这个方法,,, ...

楼上说得没错:
but.addKeyListener(new KeyAdapter() {                        
                        public void keyPressed(KeyEvent e)
                        {                                                                        
                                //在这添加测试代码可以证明:
                               if(e.isControDown)
                                       System.out.println("contro is Down");//按下control时打印;
                                 if(e.getKeyCode()==e.VK_ENTER )
                                       System.out.println("contro is Down");//按下control+enter时打印;
                                if (e.getKeyCode()==e.VK_ENTER && e.isControlDown()) {        //如果你按下了Control键并且e.getKeyCode()的值==e.VK_ENTER
                                        System.out.println("crtl+enter运行了");
                        }
回复 使用道具 举报
呵呵我还想更彻底的了解底层的原理,,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马