我有public class MainFrame extends JFrame implements ActionListener {

然后再:

public void keyPressed(KeyEvent e) {
        if (e.getKeyCode() == e.VK_LEFT) {
        int x = ball.getX() + 1;
         ball.setX(x);
        }
        }


但是我认为应该没有反应。

如果我添加keylistener而不是actionlister,我将无法编译我无法理解的代码。我是Java的新手,但是我已经习惯了C#

最佳答案

您需要实现java.awt.event.KeyListener而不是ActionListener来监听关键事件。
您需要通过调用addKeyListener(...)在要侦听的元素(框架)上注册侦听器。


例:

public class TestFrame extends JFrame implements KeyListener {

    public static void main(String[] args) throws FileNotFoundException {
        TestFrame testFrame = new TestFrame();
        testFrame.setSize(100, 100);
        testFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        testFrame.addKeyListener(testFrame);
        testFrame.setVisible(true);
    }

    @Override
    public void keyTyped(KeyEvent e) {    }
    @Override
    public void keyPressed(KeyEvent e) {
        System.out.println(e);
    }
    @Override
    public void keyReleased(KeyEvent e) {   }
}

07-28 06:00