【问题标题】:Why does my KeyListener not work? [duplicate]为什么我的 KeyListener 不起作用? [复制]
【发布时间】:2017-09-06 02:48:35
【问题描述】:

我的 KeyListener 没有注册任何按键被按下,我能做些什么来解决这个问题?我曾尝试使用键码而不是 VK_DOWN 格式,但这并没有什么不同。我没有使用 jpanel..

     import javax.swing.*;
     import java.awt.event.*;
     public class SnakeFrame extends JFrame
   {
final int FRAME_WIDTH = 800;
final int FRAME_HEIGHT = 700;
private SnakeComponent scene;
class KeyPressListener implements KeyListener
{
    public void keyPressed(KeyEvent e) 
    {
        int keyCode = e.getKeyCode();
        switch( keyCode ) { 
            case KeyEvent.VK_UP:
            // handle up 
            System.out.println("Hello");
            case KeyEvent.VK_DOWN:
            // handle down 
            scene.a("d");
            case KeyEvent.VK_LEFT:
            // handle left
            scene.a("l");
            case KeyEvent.VK_RIGHT :
            // handle right
            scene.a("r");
        }
        KeyListener key = new KeyPressListener();
        scene.addKeyListener(key);
    } 

    public void keyReleased(KeyEvent e){}

    public void keyTyped(KeyEvent e) {}
}
class TimerListener implements ActionListener
{
    public void actionPerformed(ActionEvent event)
    {
        scene.moveSnake();
        scene.eaten();
        scene.gameOver();
    }
}
public SnakeFrame()
{
    scene = new SnakeComponent();
    add(scene);

    setSize(FRAME_WIDTH, FRAME_HEIGHT);

    KeyListener key = new KeyPressListener();
    scene.addKeyListener(key);

    ActionListener listener = new TimerListener();
    final int DELAY = 80;
    Timer t = new Timer(DELAY, listener);
    t.start();

}

}

我已经尝试过 if/else 语句而不是 switch case,但这不起作用

【问题讨论】:

    标签: java jframe keylistener keyevent event-listener


    【解决方案1】:

    KeyListener 需要做两件事,它需要注册为focsuable 的组件并具有当前键盘焦点,然后才能生成键,这是KeyListeners 的已知限制

    与有关该主题的所有其他问题一样,推荐的解决方案是使用 Key Bindings API,该解决方案旨在解决此问题,并让您控制它应该在哪个焦点级别生成事件

    【讨论】:

      猜你喜欢
      • 2013-10-20
      • 1970-01-01
      • 2013-07-27
      • 2017-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-22
      • 2015-12-16
      相关资源
      最近更新 更多