我正在尝试制作一个小游戏,你必须躲避椭圆形的矩形,我遇到了这个问题。
Dodge is not abstract and does not override abstract method keyReleased(KeyEvent) in KeyListener
我已经在互联网上寻找答案,但我无法找到答案。
package dodge;
import java.awt.event.KeyListener;
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.*;
import java.awt.Graphics;
public class Dodge extends JPanel implements KeyListener {
private int x = 5, y = 5;
public Dodge(){
setSize(new Dimension(500, 400));
setPreferredSize(new Dimension(500, 400));
//setBackground(Color.BLACK);
}
public void paint(Graphics g){
g.setColor(Color.BLACK);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(Color.WHITE);
g.fillOval(x, y, 20, 20);
repaint();
}
public static void main(String[] args) {
Dodge game = new Dodge();
JFrame frame = new JFrame();
frame.setTitle("Dodge the Rectangles");
frame.add(game);
frame.pack();
frame.setResizable(false);
frame.setSize(new Dimension(500, 400));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
答案 0 :(得分:3)
正如已经指出的那样,您需要编写或继承您实现的任何接口所需的每个方法。作为一种方便的实现接口,接口可能与它相关联,为其部分或全部方法提供默认实现。
对于KeyListener,便捷类是java.awt.event.KeyAdapter。它提供了空方法。如果你扩展它,你只需要直接实现你想要的方法。
要查找接口的便捷类,请扫描其“所有已知的实现类”列表。
答案 1 :(得分:2)
在实现接口(keyReleased(KeyEvent)
)时,必须覆盖方法KeyListener
。
规则:如果您的类不是抽象的,则必须覆盖正在实现的接口中定义的所有方法。
在Dodge
课程中添加此代码并试一试。
public void keyReleased(KeyEvent e)
{
//code.
}
由于KeyListener
还有两种方法。
keyTyped(KeyEvent e)
强> keyPressed(KeyEvent e)
强> 如果您希望课程继续实施KeyListener
,您还需要覆盖它们。
答案 2 :(得分:1)
您添加了implements KeyListener
,这意味着“我将实现KeyListener接口中定义的方法”,但您实际上并没有这样做。
如果您希望您的游戏可以通过键盘控制,您仍然可以使用KeyListener(虽然这是一种旧技术)。但如果你这样做,你将不得不实施其方法。
如果您不这样做,这是一个错误,只需删除implements KeyListener
。
答案 3 :(得分:-1)
我有同样的问题,它看起来像一个大问题,但它不是。只需在代码中添加以下行
即可@Override public void keyReleased( KeyEvent e ){}