当我编译下面给出的代码时,它给出了一个错误说:
firstGUI不是抽象的,并且不会覆盖java.awt.event.ActionListener中的抽象方法actionPerformed(java.awt.event.ActionEvent)
这些是确切的词。
在初学者中,这是我的第一个使用Buttons和TextFields的程序。 任何帮助表示赞赏。
我使用BlueJ来运行我的程序。
//program using Buttons and Textfields
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.*;
import java.awt.event.ActionListener;
import java.awt.event.*;
public class firstGUI extends JFrame implements ActionListener{
int l;
JTextField tf = new JTextField("0",10);
JButton b1 = new JButton("Count");
public firstGUI()
{
setTitle("Java Button");
setVisible(true);
setSize(600,600);
SetDefaultCloseOperation(EXIT_ON_CLOSE);
tf.setEditable(false);
b1.addActionListener(this);
}
public void main(String[] args)
{
firstGUI obj = new firstGUI();
}
@Override
public void cal(ActionEvent e)
{ l++;
tf.setText(l+"");}
}
}
答案 0 :(得分:2)
您可能希望将方法public void cal(ActionEvent e)
重命名为public void actionPerformed(ActionEvent e)
。问题是找不到错误消息中指定的函数,因为您给它一个不同的名称。
编辑:有关抽象类和继承的更多信息,请阅读this。
答案 1 :(得分:2)
当您想在类中实现某个界面时,如示例
public class firstGUI extends JFrame implements ActionListener{
您应该提供在已使用的接口和ActionListener
中声明的方法的自己的方法实现:
@Override
public void actionPerformed( ActionEvent e )
{
// your code
}
或者将您的方法public void cal(ActionEvent e)
重命名为public void actionPerformed(ActionEvent e)
,以匹配合同格式ActionListener
界面。
答案 2 :(得分:1)
为了将类用作具体类,如果要扩展抽象类或实现接口,则必须为所有抽象方法提供实现。如果在抽象类/接口中留下任何方法 - 该类将不被视为具体,需要标记为抽象。
错误明确提到您需要覆盖(提供实现)上述方法 - 只有在此之后您才能编译(并运行)您的代码。
答案 3 :(得分:0)
实现接口的任何具体(即非抽象)类都需要提供该接口指定的方法。由于您的类被声明为实现接口,但它没有提供所需的方法,因此无法实例化该类,因此需要声明abstract
才能进行编译。
基本上,如果您的班级应该实施ActionListener
,那么它应该有actionPerformed(ActionEvent)
方法。