为什么KeyEvent不能工作,虽然实现了KeyListener接口?

时间:2015-12-14 11:27:30

标签: java jpanel keylistener keyevent

KeyDemo类中,我实现了KeyListener,但我无法理解为什么KeyEvent不起作用。我正在按键,但没有任何事情发生。这只是一个大班的Demo级。有人帮我解决了这个问题。

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class KeyDemo extends JPanel implements KeyListener {

    public KeyDemo() {
        // TODO Auto-generated constructor stub
        addKeyListener(this);
    }

    @Override
    public void keyPressed(KeyEvent e) {

        switch (e.getKeyCode()) {
        case KeyEvent.VK_UP:
            System.out.println("moving up");
            break;
        case KeyEvent.VK_RIGHT:
            robot.moveRight();
            robot.setMovingRight(true);
            break;
        }
    }

    @Override
    public void keyReleased(KeyEvent e) {

        switch (e.getKeyCode()) {
        case KeyEvent.VK_UP:
            System.out.println("stop moving up");
            break;
        case KeyEvent.VK_LEFT:
            robot.stopLeft();
            break;
        }
    }

    @Override
    public void keyTyped(KeyEvent e) {
        // TODO Auto-generated method stub

    }   
}

主要课程:

public class Main{
    public static void main(String[] args){
        JFrame f = new JFrame();
        f.setSize(400, 400);
        f.setVisible(true);
        KeyDemo demo = new  KeyDemo();
        f.add(demo);
    }
}

2 个答案:

答案 0 :(得分:0)

您的KeyDemo课程可能没有焦点。

无论如何,这些天,建议的方法是使用键绑定:https://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html

答案 1 :(得分:0)

这是一个焦点问题。

尝试点击标签以获得专注于面板或调用

demo.requestFocus();