【发布时间】:2019-03-20 21:34:00
【问题描述】:
我在创建此类时收到两个错误。第一个出现在:
public class DisplayerDeluxe extends JPanel implements ActionListener,
KeyListener{
显示以下编译器错误:DisplayerDeluxe is not abstract and does not override abstract method keyReleased(java.awt.event.KeyEvent) in java.awt.event.KeyListener
此处显示下一个错误
public void startGame() {
paintCurrent(0, 0);
for(int i = 0; i < height; i++) {
for(int j = 0; j < width; j++) {
bRef[i][j].addKeyListener(new KeyListener() { //Error is shown here
@Override public void keyPressed(KeyEvent e) {
mazeBuilder.buildPath();
Grid grid = mazeBuilder.getGrid();
if(e.getKeyCode() == KeyEvent.VK_UP && getYPos() != 0
&& !getCell(getXPos(), getYPos(), grid).hasNorth()) {
moveUp();
}
else if(e.getKeyCode() == KeyEvent.VK_DOWN && getYPos() != height - 1
&& !getCell(getXPos(), getYPos(), grid).hasSouth()) {
moveDown();
}
else if(e.getKeyCode() == KeyEvent.VK_LEFT && getXPos() != 0
&& !getCell(getXPos(), getYPos(), grid).hasWest()) {
moveLeft();
}
else if(e.getKeyCode() == KeyEvent.VK_RIGHT && getXPos() != width - 1
&& !getCell(getXPos(), getYPos(), grid).hasEast()) {
moveRight();
}
else {
infoBox("Only arrow key input in a dirrection " +
"not blocked by a wall is valid.", "Maze Game");
}
}
});
}
}
infoBox("Welcome to the maze game! Navigate your way to the end by using the arrow keys!", "Maze Game");
}
错误显示:<anonymous DisplayerDeluxe$1> is not abstract and does not override abstract method keyReleased(java.awt.event.KeyEvent) in java.awt.event.KeyListener
这让我非常困惑,因为我的代码中没有任何地方包含 keyReleased() 并且 keyPressed() 具有 @Override 表示法。任何对此的见解将不胜感激!
【问题讨论】:
-
无论你是否使用它们,你都需要覆盖类中的所有三个方法。 keyPressed(KeyEvent e) void keyReleased(KeyEvent e) void keyTyped(KeyEvent e) 。这是因为您使用的是 KeyListener 接口。
-
谢谢!我没有意识到所有的方法都必须被覆盖!过去一个小时一直让我头疼!
标签: java keylistener keyevent