java键盘监听器不起作用,求大神指点

import javax.swing.event.*;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.event.*;

public class TankWar extends JFrame {
JButton bt;
JPanel p;
public TankWar(){
super("TankWar");
p=new JPanel();
bt=new JButton("test");
bt.requestFocus();
bt.addKeyListener(new KeyAdapter(){
public void keyTyped(KeyEvent e){
if(KeyEvent.VK_ESCAPE==e.getKeyCode()){
System.exit(0);
}
}
});

this.add(p);
p.add(bt);
p.setSize(80, 80);
bt.setSize(40, 30);
this.pack();
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

public static void main(String[] args) {
new TankWar();

}
}

为什么我按 esc不能退出程序呢?

第1个回答  2013-12-04
不要使用keyTyped、而是使用keyPressed方法

bt.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
if(KeyEvent.VK_ESCAPE==e.getKeyCode()){
System.exit(0);
}
}
});追问

可以了,可是为什么呢?其实我想做一个坦克大战游戏,我给JPanel加了一个监听,用来更改我的坦克位置属性,用一个timer来时刻刷新绘图,可是我的监听器不起作用。我用的keyadapter继承来的,这个大概会是什么问题呢,如果不忙的话我可以发过去源码您看一下

本回答被提问者采纳
第2个回答  2013-12-04
键盘监听器在加了监听器的组件获得焦点的时候才能用. 对于按钮来说, 通常按钮被点了之后, 上面会出一个方框, 证明按钮持有焦点, 你确认一下.
而且为什么要把键盘监听放在按钮上呢, 很不合理.
相似回答