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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 侯凯斌 中级黑马   /  2012-11-20 12:08  /  8669 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我写了一个Java控制台小程序,运行后为连续运行,请问如何实现按ESC键结束程序?我尝试用键盘事件,好像不是随便一个对象就可以做事件源,我就选了个按钮,然后加上监听器,实现方法后,还是不能实现这个功能,不知道问题出在哪。我是初学,请各位老师帮忙,谢谢。
  1. ...
  2. //加入事件源和监听
  3. Button button=new button();
  4. button.addKeyListener(this);
  5. ...
  6. //实现键盘按下方法
  7. public void keyPressed(KeyEvent e)
  8. {
  9. if(e.getKeyCode==KeyEvent.VK_ESCAPE)
  10.    System.exit(0);
  11. }
  12. public void keyTyped(KeyEvent e)
  13. {
  14. }
  15. public void keyReleased(KeyEvent e)
  16. {
  17. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
请问LZ .button.addKeyListener(this);  你这this引用的哪个对象 ?

注册监听器时只能把监听器接口的实现类对象放到this这个位置上去。

最好把完整代码贴上来。好分析。
回复 使用道具 举报
public static void main(String[] args) {
                new MyWindow();
        }
       
}
class MyWindow{
        private Frame f;
        public MyWindow(){
            f = new Frame();
                f.setBounds(100,200, 200, 200);
                f.setVisible(true);
                MyEvent();
        }
        public void MyEvent(){
                f.addKeyListener(new KeyAdapter() {

                        @Override
                        public void keyPressed(KeyEvent e) {
                                // TODO Auto-generated method stub
                                super.keyPressed(e);   
                                if(e.getKeyCode() == e.VK_ESCAPE){
                                        System.exit(0);
                                }
                        }
                  
                });
        }
}
这个可以实现吧
回复 使用道具 举报
要实现你这个功能,首先第一点,焦点,组件必须持有焦点才能有事件响应,一般出现无响应的情况的解决办法,你可以通过将该监听器同时添加到顶层容器里,比如jframe里

更好的实现方式是实现一个awt的顶级监听器来监听整个程序的所有事件,从而在细分到你感兴趣的事件,这种方法要复杂的多,不过用来做那种全局的快捷键会很好
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马