actionPerformed 不起作用

actionPerformed is not working

actionPerformed 不工作,但 KeyListener 正在工作,当我按下向上按钮时,我得到了输出。我不明白为什么 void actionPerformed 不起作用。它对我有用过一次。 ################################################## ############################

import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;

public class Window implements ActionListener, KeyListener{

public static Window window;
public static DrawWindow drawWindow;

public Point player;
public Point wall;

public boolean isMovingUp = false, isMovingDown = false, isMovingLeft = false, isMovingRight = false;

public static void main(String[] args) {
    window = new Window();
}

public Window() {
    JFrame frame = new JFrame();
    frame.setSize(500, 500);
    frame.setTitle("Test");
    frame.setLocationRelativeTo(null);
    frame.setResizable(false);
    frame.add(drawWindow = new DrawWindow());
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
    frame.addKeyListener(this);

    game();
}
public void game() {
    player = new Point(0,0);
    System.out.println("player is created");  //working

}


@Override
public void actionPerformed(ActionEvent arg0) {

    drawWindow.repaint();

    if(isMovingUp == true) {
        player.y += 1;
        System.out.println("Moving");   //Not working
    }
}

@Override
public void keyPressed(KeyEvent g) {
    int key = g.getKeyCode();
    if(key == KeyEvent.VK_UP) {
        isMovingUp = true;
        System.out.println("arrow up is pressed, isMovingUp = true");  //Working

    }
}

@Override
public void keyReleased(KeyEvent g) {

}

@Override
public void keyTyped(KeyEvent arg0) {

}

}

您忘记将您的组件(例如 this)设置为动作侦听器,通过以下习惯用法:

frame.addActionListener(this);

有关详细信息,请参阅 documentation