KeyListener无法正常工作? [英] KeyListener isn't working?
本文介绍了KeyListener无法正常工作?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
好吧,所以我有这个游戏的关键侦听器,它不能正常工作,但是当我创建一个新项目只是为了测试它是否对我有用时,它确实起作用了吗?所以这是我的游戏代码:
Ok, so I have this key listener for my game and it isn't working but when I made a new project just to test does it work at all for me it did? So here's some code of my game:
public class GameKeyListener implements KeyListener {
private void pressMainWeapon() {
Constants.MAIN_WEAPON_PRESSED = Constants.MAIN_WEAPON_PRESSED ? true : false;
}
private void pressSecondaryWeapon() {
Constants.SECONDARY_WEAPON_PRESSED = Constants.SECONDARY_WEAPON_PRESSED ? true : false;
}
private void pressSkillsButton() {
Constants.SKILLS_BUTTON_PRESSED = Constants.SKILLS_BUTTON_PRESSED ? true : false;
}
private void gameKeyPressed(int keyCode) {
switch (keyCode) {
case KeyEvent.VK_Q:
pressMainWeapon();
break;
case KeyEvent.VK_E:
pressSecondaryWeapon();
break;
case KeyEvent.VK_TAB:
pressSkillsButton();
break;
case KeyEvent.VK_W:
Constants.CHARACTER_Y -= 5;
break;
case KeyEvent.VK_A:
Constants.CHARACTER_X -= 5;
break;
case KeyEvent.VK_S:
Constants.CHARACTER_Y += 5;
break;
case KeyEvent.VK_D:
Constants.CHARACTER_X += 5;
break;
}
}
private void gameKeyReleased(int keyCode) {
}
private void gameKeyTyped(char keyChar) {
}
@Override
public void keyPressed(KeyEvent e) {
gameKeyPressed(e.getKeyCode());
System.out.println(e.getKeyChar());
}
@Override
public void keyReleased(KeyEvent e) {
gameKeyReleased(e.getKeyCode());
}
@Override
public void keyTyped(KeyEvent e) {
gameKeyTyped(e.getKeyChar());
}
和
public class GraphicsMain {
static JFrame f = new JFrame("Gurillia");
private static GameCanvas gc = new GameCanvas();
public static void startGraphics() throws IOException {
f.setVisible(true);
f.setIgnoreRepaint(true);
f.setContentPane(gc);
gc.setPreferredSize(new Dimension(Constants.GAME_WIDTH, Constants.GAME_HEIGHT));
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setResizable(false);
f.addKeyListener(new GameKeyListener());
}
但这确实有效:
public class testkeylistener implements KeyListener {
@Override
public void keyPressed(KeyEvent arg0) {
System.out.println(arg0.getKeyChar());
}
@Override
public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
public static void main(String args[]) {
JFrame f = new JFrame("test");
f.setSize(1000,1000);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
f.pack();
f.addKeyListener(new testkeylistener());
}
那是什么问题?
推荐答案
问题是您在KeyListener
s上工作,而Swing被设计为使用
The problem is you work with KeyListener
s while Swing was designed to use KeyBindings. The difference might be due to different focus behavior.
例如,参见这个问题,其中KeyListener
仅偶尔起作用
See for example this question where a KeyListener
only occasionally worked
这篇关于KeyListener无法正常工作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文