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

Java 尽管有方法,但不重写抽象方法actionPerformed(ActionEvent)错误,java,actionlistener,Java,Actionlistener,编辑:感谢所有指出错误的人!但是,我的计时器仍然有问题。由于某些原因,计时器不会导致每秒钟重新绘制一次窗口。编辑后的代码发布在下面 我在编译以下代码时遇到问题-我遇到两个错误: C:\java>javac Project2.java java:8:错误:Project2不是抽象的,并且不重写抽象 ActionListener中的actionPerformed(ActionEvent)方法 公共类Project2扩展小程序实现ActionListener ^ Project2.java:19:er

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

我在编译以下代码时遇到问题-我遇到两个错误:
C:\java>javac Project2.java
java:8:错误:Project2不是抽象的,并且不重写抽象
ActionListener中的actionPerformed(ActionEvent)方法
公共类Project2扩展小程序实现ActionListener
^
Project2.java:19:error:不是抽象的,也不是ove
Ride ActionListener中的抽象方法actionPerformed(ActionEvent)
ActionListener getNewValues=新ActionListener(){
^
2个错误

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

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

}
}
import java.applet.*;
导入java.awt.*;
导入java.awt.event.*;
导入java.lang.*;
导入javax.swing.*;
导入java.awt.Color;
公共类Project2扩展了Applet
{
整数平方=1;
int squareh=1;//乌龟和兔子的初始位置
int-move;
字符串tmessage;
字符串消息;
定时器;
公共void init()
{
定时器=新定时器(1000,GetNewValue);
timer.addActionListener(getNewValues);
}
ActionListener getNewValues=新ActionListener(){
已执行的公共无效操作(操作事件e)
{
重新油漆();
}
};
公共空间涂料(图g)
{
move=(int)(Math.random()*10)+1;
如果(移动>8)
{   
平方-=6;
tmessage=“乌龟滑倒!”;
if(平方<1)
平方=1;
}       
否则如果(移动>6)
{
平方+=1;
tmessage=“乌龟缓慢前行。”;
如果(平方>49)
平方=50;
平方H-=2;
hmessage=“兔子轻微打滑。”;
if(平方h<1)
平方H=1;
}
否则如果(移动>5)
{
平方+=1;
tmessage=“乌龟缓慢前行。”;
如果(平方>49)
平方=50;
平方H-=12;
hmessage=“兔子滑倒了。”;
if(平方h<1)
平方H=1;
}
否则如果(移动>2)
{
平方+=3;
tmessage=“乌龟缓慢前行。”;
如果(平方>49)
平方=50;
平方H+=1;
hmessage=“兔子跳了一小步。”;
如果(平方H>49)
平方H=50;
}
其他的
{
平方+=3;
tmessage=“乌龟缓慢前行。”;
如果(平方>49)
平方=50;
平方H+=9;
hmessage=“兔子跳得很大。”;
如果(平方H>49)
平方H=50;
}
g、 抽绳(“起点(方格1)”,0,70;
g、 拉丝(“饰面(50号方格)”、900、70;
//确定每个区域的位置
//每个盒子十宽150高
椭圆的最终整数宽度=4;
椭圆的最终整数高度=4;
_平方的最终整数宽度_=20;
最终整数高度_平方=20;
g、 setColor(Color.GREEN);
g、 圆角椭圆((正方形的宽度-椭圆形的宽度)/2)+正方形的宽度*(正方形-1),((正方形的高度-椭圆形的高度)/2),椭圆形的宽度,椭圆形的高度);
g、 setColor(颜色为黄色);
g、 圆角椭圆(((正方形的宽度-椭圆形的宽度)/2)+正方形的宽度*(正方形-1),((正方形的高度-椭圆形的高度)/2)+正方形的高度、椭圆形的宽度、椭圆形的高度);
//显示消息
g、 设置颜色(颜色为黑色);
g、 抽绳(tmessage,10100);
g、 抽绳(hmessage,10120);
g、 绘制线(0,正方形的高度,正方形的宽度*50,正方形的高度);//绘制水平中间线
对于(int i=0;i<50;i++)//绘制垂直线
{
整数宽度=(i+1)*平方的宽度;
g、 抽绳(宽度,0,宽度,高度×2);
}
如果(平方>49和平方>49)
{
g、 抽绳(“领带!”、500、60);
timer.stop();
}   
否则如果(平方>49)
{
g、 抽绳(“海龟赢了!”,500,60);
timer.stop();
}
否则如果(平方H>49)
{
g、 抽绳(“兔子赢了!”,500,60);
timer.stop();
}   
其他的
{
}   
更新(g);
}
公共静态void main(字符串[]args)
{
Project2面板=新的Project2();
JFrame应用程序=新JFrame();
application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
应用程序。添加(面板);
应用程序。设置大小(2600300);
application.setVisible(true);
}
}

我已经执行了方法操作,因此我不确定为什么会出现错误。如果您有任何反馈或帮助,我将不胜感激。

您在执行的
操作中有拼写错误,您错过了r。更改为:

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

public void actionPeformed(ActionEvent e)
应该是
public void actionPerformed(ActionEvent e)
(注意r)。在重写方法时使用
@Override
是个好主意,编译器会检测到您的错误。哦,谢谢!我不敢相信我之前没有注意到:p您觉得程序中的逻辑听起来怎么样?我对编程非常陌生,所以我喜欢您的输入。如果我是您,我会使用IDE。实时“拼写检查”,编译检查和自动完成是你最好的朋友!至于你的逻辑。我会创建一些设置活动(似乎你有3个)并为此创建一个枚举。保存大量if/else内容。另外,最好将代码拆分,比如有一个专门用于移动的类或方法,而不是将其全部放在一个文件中。最后但并非最不重要的是,您的乌龟和兔子可能每次都会执行相同的操作。您能找出原因吗?(我会回来)约佳:你说得对
public void actionPerformed(ActionEvent e)  
{
     repaint();
}