Java 为什么在按下小程序按钮时收到抽象类错误?

Java 为什么在按下小程序按钮时收到抽象类错误?,java,swing,applet,awt,abstract-class,Java,Swing,Applet,Awt,Abstract Class,我正在尝试创建一个按钮,一旦按下它,旧屏幕就会消失,并绘制新的内容。我计划画一个房间,然后在门上加一个按钮。当按下门上的按钮时,它将擦除旧屏幕并进入新房间 为什么我会收到此错误: Test is not abstract and does not override abstract method actionPerformed(java.awt.event.ActionEvent) in java.awt.event.ActionListener 相关代码: import javax.swi

我正在尝试创建一个按钮,一旦按下它,旧屏幕就会消失,并绘制新的内容。我计划画一个房间,然后在门上加一个按钮。当按下门上的按钮时,它将擦除旧屏幕并进入新房间

为什么我会收到此错误:

Test is not abstract and does not override abstract method 
actionPerformed(java.awt.event.ActionEvent) in java.awt.event.ActionListener
相关代码:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.border.*;
import javax.swing.JComponent.*;

public class Test extends JFrame implements ActionListener{

    private JLabel msg;
    private final String ButtonText = "Room";

    public void init()
    {

        Container contentHolder = getContentPane();

        contentHolder.setLayout(new BorderLayout(18,18));

        msg = new JLabel("");
        contentHolder.add(msg, BorderLayout.CENTER);

        JPanel buttonPanel = new JPanel();

        JButton myButton = new JButton(ButtonText);

        myButton.addActionListener(this);

        buttonPanel.add(myButton);

        contentHolder.add(buttonPanel, BorderLayout.SOUTH);

    }

    public void actionPerformed(ActionEvent evt, Graphics g)
    {


        String command = evt.getActionCommand();

        if(ButtonText.equals(command))
        {
        Dimension d = getSize();
        g.setColor(Color.WHITE);
        g.fillRect(0, 0, d.width, d.height);
        house.drawRoom(g);
        }
    }
}

class house extends Test
{

    public static void drawRoom(Graphics g)
    {
        Expo.drawCircle(g,100,100,25);
    }

}

您的actionPerformed方法的签名是

public void actionPerformed(ActionEvent evt, Graphics g)
您必须覆盖:

public void actionPerformed(ActionEvent e)

出现错误的原因是您没有签名为
actionPerformed(java.awt.event.ActionEvent)
的方法。abstract关键字意味着超类不为函数定义任何类型的默认实现,因此由您来定义它。否则,您需要声明类抽象,告诉任何扩展您的类的类它们需要实现它

您确实有一个方法
public void actionPerformed(ActionEvent evt,Graphics g)
,但这与
public void actionPerformed(ActionEvent evt)
不同。包含使用
actionEvent
函数的库需要能够仅使用事件而不是事件和其他一些参数来调用它


避免这种情况的一种方法是在您认为应该重写超类或模板函数的每个类方法上放置
@Override
注释。这样,它会告诉您,
actionPerformed(ActionEvent evt,Graphics g)
实际上并没有覆盖任何内容。

前面的答案非常准确

我只想指出,为了在运行时获得该异常消息,您必须忽略一些编译错误消息,并尝试运行Applet


这是个坏主意。。。除非你知道你在做什么。

你画的代码全错了。也许会让你开始。不要忘记阅读教程链接了解基础知识。