我正在尝试创建一个按钮,一旦按下就会擦除旧屏幕并绘制新内容。我打算画一个房间,然后在门上添加一个按钮。当按下门上的按钮时,它应该擦除旧屏幕并在新房间中绘制。
为什么我收到此错误:
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);
}
}
答案 0 :(得分:1)
您的actionPerformed方法的签名是
public void actionPerformed(ActionEvent evt, Graphics g)
你必须覆盖:
public void actionPerformed(ActionEvent e)
答案 1 :(得分:1)
您收到错误的原因是您没有签名为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)
实际上没有覆盖任何东西。
答案 2 :(得分:0)
以前的答案都是现货。
我只想指出,为了在运行时获取异常消息,您必须忽略一些编译错误消息,并尝试运行Applet。
这是一个坏主意......除非你知道自己在做什么。