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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 贾浩田 高级黑马   /  2014-8-10 14:39  /  1243 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在开发AWT时,我需要实现键盘按esc实现System.exit(0)功能,请问为何我把监听器注册到Frame上无法实现;必须要注册到Button上才可以,并且该Button必须是当前事件源才能开启监听机制??求解

5 个回复

倒序浏览
{:2_31:}{:2_31:}{:2_31:}{:2_31:}{:2_31:}{:2_31:}
回复 使用道具 举报
为什么不行,可以啊
见下面的代码
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);
                        }
                });
        }
}


回复 使用道具 举报
zeus00456 发表于 2014-8-11 10:38
为什么不行,可以啊
见下面的代码

在框架上注册键盘监听器,按esc实现关闭jvm,我也是这么写的,外加e.getKeyCode() = VK_ESCAPE然后再exit 就是不可以,很奇怪
回复 使用道具 举报
贾浩田 发表于 2014-8-11 14:59
在框架上注册键盘监听器,按esc实现关闭jvm,我也是这么写的,外加e.getKeyCode() = VK_ESCAPE然后再exit ...

那个确实是不可以,我当时也没试出来,貌似问题出在escape键上,那个键不触发键盘事件(可能)
回复 使用道具 举报
zeus00456 发表于 2014-8-11 15:01
那个确实是不可以,我当时也没试出来,貌似问题出在escape键上,那个键不触发键盘事件(可能) ...

注册到button上倒是可以实现按esc退出,不过必须该Button是当前事件源才可以,我试的时候是这样,如果当前事件源是另外一个button,按esc是没反应的,感觉java这个设计很不人性化啊,keyListener的注册事件源应该有限制才好,现在这个注册监听机制有点让人混淆了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马