KeyListener无法正常工作? [英] KeyListener isn't working?

查看:103
本文介绍了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 KeyListeners 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆