黑马程序员技术交流社区

标题: 关于KeyListener的一个小问题 [打印本页]

作者: 贾浩田    时间: 2014-8-10 14:39
标题: 关于KeyListener的一个小问题
在开发AWT时,我需要实现键盘按esc实现System.exit(0)功能,请问为何我把监听器注册到Frame上无法实现;必须要注册到Button上才可以,并且该Button必须是当前事件源才能开启监听机制??求解
作者: 这个夏天的芬芳    时间: 2014-8-10 23:53
{:2_31:}{:2_31:}{:2_31:}{:2_31:}{:2_31:}{:2_31:}
作者: zeus00456    时间: 2014-8-11 10:38
为什么不行,可以啊
见下面的代码
package com.meiyouzhegewang.gui;

import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Toolkit;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

public class KEYClose {
        public static void main(String[] args) {
                        new Themain();
        }

}
class Themain
{
        private Frame frm;
        Themain(){       
                frm = new Frame();       
                int width = Toolkit.getDefaultToolkit().getScreenSize().width;
                int height = Toolkit.getDefaultToolkit().getScreenSize().height;
                frm.setBounds((width-640)/2, (height-360)/2, 640, 360);
                frm.setLayout(new FlowLayout());
                //添加监听,为何不行
                frm.addKeyListener(new KeyAdapter(){
                        public void keyPressed(KeyEvent e) {
                                System.exit(0);
                        }
                });
        }
}



作者: 贾浩田    时间: 2014-8-11 14:59
zeus00456 发表于 2014-8-11 10:38
为什么不行,可以啊
见下面的代码

在框架上注册键盘监听器,按esc实现关闭jvm,我也是这么写的,外加e.getKeyCode() = VK_ESCAPE然后再exit 就是不可以,很奇怪
作者: zeus00456    时间: 2014-8-11 15:01
贾浩田 发表于 2014-8-11 14:59
在框架上注册键盘监听器,按esc实现关闭jvm,我也是这么写的,外加e.getKeyCode() = VK_ESCAPE然后再exit ...

那个确实是不可以,我当时也没试出来,貌似问题出在escape键上,那个键不触发键盘事件(可能)
作者: 贾浩田    时间: 2014-8-11 15:08
zeus00456 发表于 2014-8-11 15:01
那个确实是不可以,我当时也没试出来,貌似问题出在escape键上,那个键不触发键盘事件(可能) ...

注册到button上倒是可以实现按esc退出,不过必须该Button是当前事件源才可以,我试的时候是这样,如果当前事件源是另外一个button,按esc是没反应的,感觉java这个设计很不人性化啊,keyListener的注册事件源应该有限制才好,现在这个注册监听机制有点让人混淆了




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