java - 尽管有方法,但不重写抽象方法 actionPerformed(ActionEvent) 错误

标签 java actionlistener

编辑:感谢所有指出错字的人!但是,我的计时器仍然存在问题。由于某种原因,计时器不会导致窗口每秒重新绘制。编辑后的代码发布在下面!

我在编译以下代码时遇到问题 - 我收到两个错误:

C:\java>javac Project2.java
Project2.java:8: error: Project2 is not abstract and does not override abstract
method actionPerformed(ActionEvent) in ActionListener
public class Project2 extends Applet implements ActionListener
       ^
Project2.java:19: error: <anonymous Project2$1> is not abstract and does not ove
rride abstract method actionPerformed(ActionEvent) in ActionListener
        ActionListener getNewValues = new ActionListener() {
                                                           ^
2 errors

该程序的目的是模拟乌龟和兔子之间的比赛。随机数生成器用于确定乌龟和兔子在任何给定回合可以向前或向后移动多少步。

import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.lang.*;
import javax.swing.*;
import java.awt.Color;



public class Project2 extends Applet
{
int squaret = 1;
int squareh = 1; //initial location of tortoise and hare
int move;
String tmessage;
String hmessage;

Timer timer;

public void init()
{

    timer = new Timer(1000, getNewValues); 
    timer.addActionListener(getNewValues);


}


ActionListener getNewValues = new ActionListener() {

    public void actionPerformed(ActionEvent e) 
    {
        repaint();
    }
};

public void paint (Graphics g) 
{
    move = (int)(Math.random() * 10) + 1;

    if (move > 8)
    {   
        squaret -= 6;
        tmessage = "Tortoise slips!";

        if (squaret < 1)
            squaret = 1;

    }       
    else if (move > 6)
    {
        squaret += 1;
        tmessage = "Tortoise plods slowly along.";
        if (squaret > 49)
            squaret = 50;

        squareh -=2;
        hmessage = "Hare slips slightly.";
        if (squareh < 1)
            squareh = 1;

    }

    else if (move > 5)
    {
        squaret += 1;
        tmessage = "Tortoise plods slowly along.";
        if (squaret > 49)
            squaret = 50;

        squareh -=12;
        hmessage = "Hare makes a big slip.";
        if (squareh < 1)
            squareh = 1;

    }

    else if (move > 2)
    {
        squaret += 3;
        tmessage = "Tortoise plods along quickly.";
        if (squaret > 49)
            squaret = 50;

        squareh += 1;
        hmessage = "Hare makes a small hop.";
        if (squareh > 49)
            squareh = 50;

    }
    else 
    {
        squaret += 3;
        tmessage = "Tortoise plods along quickly.";
        if (squaret > 49)
            squaret = 50;

        squareh += 9;
        hmessage = "Hare makes a big hop.";
        if (squareh > 49)
            squareh = 50;
    }

    g.drawString("Start (Square 1)", 0, 70);
    g.drawString("Finish (Square 50)", 900, 70);


    //determine positions for each area
    //each box is ten wide and 150 tall

    final int WIDTH_OF_OVAL = 4;
    final int HEIGHT_OF_OVAL = 4;
    final int WIDTH_OF_SQUARE = 20;
    final int HEIGHT_OF_SQUARE = 20;
    g.setColor(Color.GREEN);
    g.fillOval(((WIDTH_OF_SQUARE - WIDTH_OF_OVAL) / 2) + WIDTH_OF_SQUARE * (squaret - 1), ((HEIGHT_OF_SQUARE - HEIGHT_OF_OVAL) / 2), WIDTH_OF_OVAL, HEIGHT_OF_OVAL);

    g.setColor(Color.YELLOW);
    g.fillOval(((WIDTH_OF_SQUARE - WIDTH_OF_OVAL) / 2) + WIDTH_OF_SQUARE * (squaret - 1), ((HEIGHT_OF_SQUARE - HEIGHT_OF_OVAL) / 2) + HEIGHT_OF_SQUARE, WIDTH_OF_OVAL, HEIGHT_OF_OVAL);

    //show messages
    g.setColor(Color.BLACK);
    g.drawString(tmessage, 10, 100);
    g.drawString(hmessage, 10, 120);

    g.drawLine(0, HEIGHT_OF_SQUARE, WIDTH_OF_SQUARE * 50, HEIGHT_OF_SQUARE); //draw horizontal middle line

    for (int i = 0; i < 50; i++) //draw vertical lines
    {
        int width = (i + 1) * WIDTH_OF_SQUARE;

        g.drawLine(width, 0, width, HEIGHT_OF_SQUARE * 2);
    }

    if (squaret > 49 && squareh > 49)
    {
        g.drawString("Tie!", 500, 60);
        timer.stop();
    }   
    else if (squaret > 49)
    {
        g.drawString("Turtle wins!", 500, 60);
        timer.stop();
    }
    else if (squareh > 49)
    {
        g.drawString("Hare wins!", 500, 60);
        timer.stop();
    }   
    else
    {

    }   

    update(g);

}

public static void main(String[] args) 
{

    Project2 panel = new Project2();
    JFrame application = new JFrame();

    application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    application.add(panel);
    application.setSize(2600, 300);
    application.setVisible(true);

}
}

我有方法actionPerformed,所以我不确定为什么我会收到我收到的错误。任何反馈或帮助将不胜感激!

最佳答案

您在 actionPerformed 中存在拼写错误,错过了 r。更改为:

public void actionPerformed(ActionEvent e)  
{
     repaint();
}

关于java - 尽管有方法,但不重写抽象方法 actionPerformed(ActionEvent) 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20287525/

相关文章:

java - 自定义监听器为空

java - JPanel 之间的通信

java - Spring Boot - POST 请求方法不起作用,但 GET 起作用

java - Java 中的 "Buffer"类是否有任何 Objective-C 等价物?

java - 当我想比较某些东西取决于它的属性时,是否可以使用比较器

java - 尝试理解已经制作的 JApplet 代码

java - 刷新 JDesktopPane 不起作用

java - 我怎样才能在它自己的类中创建一个私有(private)方法以便反复使用

java - 我可以向 JPanel 添加 ActionListener

java - ActionListener 类的引用问题