今天做一个键盘事件的测试,上下左右移动一个小方块,一下是键盘事件监听类:
private class KeyMonitor extends KeyAdapter {
@Override public void keyPressed(KeyEvent e) { // TODO Auto-generated method stub tank.keyPressed(e); //System.out.print("press"); tank.move(body.getBounds()); body.repaint(); //tank.move(body.getBounds()); }
@Override public void keyReleased(KeyEvent e) { // TODO Auto-generated method stub body.repaint(); tank.keyReleased(e); }
@Override public void keyTyped(KeyEvent e) { // TODO Auto-generated method stub //tank.keyPressed(e); }
}
里面的tank是我要用小方块模仿的坦克对象,body是tank移动的JPanel区域,但是前面addkeyListener(new KeyMonitor());后,运行有时候键盘事件无效,有时候重新运行又有效,能够移动,这是怎么回事阿,有没有人遇到过类似的问题,可否分享一下解决的经验阿~
"
原因是找出来了,但不是很理解:
//add(buttonPanel,BorderLayout.SOUTH);将这里注释掉就可以了,无论什么时候重新运行都能监听
bodyPanel.addTank(tank);
bodyPanel.repaint();
add(body,BorderLayout.CENTER);
addKeyListener(new KeyMonitor());
其实我的JFrame包括两部分,一个bodyPanel,tank在里面移动,一个buttonPanel添加一个start和stop按钮,但是加了buttonPanel之后不知道为什么keyevent的监听时有时无,将它注释掉后就解决了,希望有人能帮忙解释一下原因~
######跟焦点有关吧版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。