'<> 不是抽象的,即使未使用 keyReleased 也不会覆盖抽象方法 keyReleased'
'<> is not abstract and does not override abstract method keyReleased' even though keyReleased is not used
我在创建这个 class 时收到两个错误。第一个出现在:
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> is not abstract and does not override abstract method keyReleased(java.awt.event.KeyEvent) in java.awt.event.KeyListener
这让我非常困惑,因为在我的代码中没有任何地方包含 keyReleased() 和 keyPressed() 具有 @Override 符号。任何对此的见解将不胜感激!
改为使用 KeyAdapter。它有内置存根。
bRef[i][j].addKeyListener(new KeyAdapter()...
当您声明 new KeyListener() { ... }
时,您正在创建所谓的匿名内部 class,它扩展 KeyListener
并创建它的未命名实例(因此是匿名的)。错误是抱怨你的匿名内部 class,显示为 <anonymous DisplayerDeluxe>
,既不是抽象的,也没有实现 java.awt.event.KeyListener
.
中描述的方法 keyReleased(java.awt.event.KeyEvent)
KeyListener 是一个接口,它约定实现者提供 3 个方法。这意味着所有实现此接口的 classes,包括匿名内部 classes 必须是抽象的(因此没有义务提供实现)或 concrete/normal class提供的实现。匿名内部 classes 始终是具体的,从不抽象,因此必须始终实现所需的所有方法。
不使用其他 classes 的解决方案是实现其他两种方法。由于您对它们没有所需的功能,因此您可以将它们留空而不做任何事情。大多数 IDE 实际上应该可以帮助您解决这个问题,因为当您开始创建匿名内部 class 时,它们会提示为您生成未实现的方法。
或者,您可以扩展另一个 class,它可能已经使用 KeyAdapter
等存根实现了部分或全部这些方法,但最终所有方法都必须以一种或另一种方式实现。
我在创建这个 class 时收到两个错误。第一个出现在:
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> is not abstract and does not override abstract method keyReleased(java.awt.event.KeyEvent) in java.awt.event.KeyListener
这让我非常困惑,因为在我的代码中没有任何地方包含 keyReleased() 和 keyPressed() 具有 @Override 符号。任何对此的见解将不胜感激!
改为使用 KeyAdapter。它有内置存根。
bRef[i][j].addKeyListener(new KeyAdapter()...
当您声明 new KeyListener() { ... }
时,您正在创建所谓的匿名内部 class,它扩展 KeyListener
并创建它的未命名实例(因此是匿名的)。错误是抱怨你的匿名内部 class,显示为 <anonymous DisplayerDeluxe>
,既不是抽象的,也没有实现 java.awt.event.KeyListener
.
keyReleased(java.awt.event.KeyEvent)
KeyListener 是一个接口,它约定实现者提供 3 个方法。这意味着所有实现此接口的 classes,包括匿名内部 classes 必须是抽象的(因此没有义务提供实现)或 concrete/normal class提供的实现。匿名内部 classes 始终是具体的,从不抽象,因此必须始终实现所需的所有方法。
不使用其他 classes 的解决方案是实现其他两种方法。由于您对它们没有所需的功能,因此您可以将它们留空而不做任何事情。大多数 IDE 实际上应该可以帮助您解决这个问题,因为当您开始创建匿名内部 class 时,它们会提示为您生成未实现的方法。
或者,您可以扩展另一个 class,它可能已经使用 KeyAdapter
等存根实现了部分或全部这些方法,但最终所有方法都必须以一种或另一种方式实现。