黑马程序员技术交流社区

标题: gui问题,,, [打印本页]

作者: 聂斌    时间: 2013-3-7 12:16
标题: gui问题,,,
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 键的键盘码,,,这个我一直想不通,,,









作者: scott0610    时间: 2013-3-7 12:28
应该是ENTER键的键盘码,你为你只重写了keyPressed这个方法,也就说明你只监听到用户按下的操作。
当你首先按下的是Control 键然后按下ENTER键,这时会执行两次keyPressed这个方法。

作者: 聂斌    时间: 2013-3-7 12:43
袁见 发表于 2013-3-7 12:28
应该是ENTER键的键盘码,你为你只重写了keyPressed这个方法,也就说明你只监听到用户按下的操作。
当你首先 ...

按下Control 键后我还没释放这个键的,,再按下ENTER键他会再次执行keyPressed这个方法,,,
作者: 谢洋    时间: 2013-3-7 14:44
聂斌 发表于 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运行了");
                        }
作者: 聂斌    时间: 2013-3-7 15:54
呵呵我还想更彻底的了解底层的原理,,




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