类不是抽象的,并且不会覆盖KeyListener中的抽象方法keyReleased(KeyEvent)

时间:2014-01-11 07:51:25

标签: java swing compiler-errors awt keylistener

我正在尝试制作一个小游戏,你必须躲避椭圆形的矩形,我遇到了这个问题。

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);
}
}

4 个答案:

答案 0 :(得分:3)

正如已经指出的那样,您需要编写或继承您实现的任何接口所需的每个方法。作为一种方便的实现接口,接口可能与它相关联,为其部分或全部方法提供默认实现。

对于KeyListener,便捷类是java.awt.event.KeyAdapter。它提供了空方法。如果你扩展它,你只需要直接实现你想要的方法。

要查找接口的便捷类,请扫描其“所有已知的实现类”列表。

答案 1 :(得分:2)

在实现接口(keyReleased(KeyEvent))时,必须覆盖方法KeyListener

规则:如果您的类不是抽象的,则必须覆盖正在实现的接口中定义的所有方法。

Dodge课程中添加此代码并试一试。

public void keyReleased(KeyEvent e)
{
  //code.
}

由于KeyListener还有两种方法。

  1. keyTyped(KeyEvent e)
  2. keyPressed(KeyEvent e)
  3. 如果您希望课程继续实施KeyListener,您还需要覆盖它们。

答案 2 :(得分:1)

您添加了implements KeyListener,这意味着“我将实现KeyListener接口中定义的方法”,但您实际上并没有这样做。

如果您希望您的游戏可以通过键盘控制,您仍然可以使用KeyListener(虽然这是一种旧技术)。但如果你这样做,你将不得不实施其方法。

如果您不这样做,这是一个错误,只需删除implements KeyListener

答案 3 :(得分:-1)

我有同样的问题,它看起来像一个大问题,但它不是。只需在代码中添加以下行

即可
@Override public void keyReleased( KeyEvent e ){}