无法让 JFrame 简单的类似绘画的程序与键绑定一起使用

Can't get JFrame simple paint-like program to work with keybindings

没有任何错误或其他问题,只是一个透明屏幕(它将复制背景)和一个绘制的椭圆形,但每当我尝试在键盘上键入箭头键时,它都不起作用。我已经添加了 KeyListener 并将 class 扩展到 JFrame,但它仍然没有执行任何操作。我知道这只是初学者的东西,但我自己也是初学者,这一直困扰着我:/。此外,我还使用了 repaint(); ,但它仍然重新渲染背景?提前感谢您的帮助!

package JavaMain;

import java.awt.Graphics;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.JFrame;

public class javamain extends JFrame {
int x, y;
private static final long serialVersionUID = 1L;
public class AL extends KeyAdapter {

    private int keycode;
    @SuppressWarnings("static-access")
    public void keypress(KeyEvent event) {
        keycode = event.getKeyCode();
        if (keycode == event.VK_LEFT) {
            x -= 10;
        }
        if (keycode == event.VK_RIGHT) {
            x += 10;
        }
        if (keycode == event.VK_UP) {
            y -= 10;
        }
        if (keycode == event.VK_DOWN) {
            y += 10;
        }
    }

    public void keyrelease(KeyEvent e) {
    }
}

public javamain() {
    addKeyListener(new AL());
    setTitle("Statistic");
    setSize(600, 800);
    setResizable(false);
    setVisible(true);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    x = 200;
    y = 200;
}

public void paint(Graphics g) {
    g.fillOval(x, y, 20, 20);
    repaint();
}

public static void main(String[] args) {
    new javamain();
}
}

错误与您的 KeyListener 有关。

AL class 没有使用正确的方法名称。

据我所知应该是 keyPressed 和 keyReleased。

private class AL extends KeyAdapter {

    public void keyPressed(KeyEvent event) {

        int keycode = event.getKeyCode();

        if (keycode == KeyEvent.VK_LEFT) {
            x -= 10;
        }
        if (keycode == KeyEvent.VK_RIGHT) {
            x += 10;
        }
        if (keycode == KeyEvent.VK_UP) {
            y -= 10;
        }
        if (keycode == KeyEvent.VK_DOWN) {
            y += 10;
        }
    }

    public void keyReleased(KeyEvent e) {

    }
}

在不更改任何其他代码的情况下,这似乎可行。