类不是抽象的,并且不覆盖抽象方法actionPerformed(ActionEvent)

时间:2018-09-26 08:57:36

标签: java actionlistener connectivity

我正在尝试将oracle sql与java连接,并希望执行一些查询,但是我遇到了错误

error: Conn is not abstract and does not override abstract method actionPerformed(ActionEvent) in ActionListener
class Conn extends JFrame implements ActionListener 

这是我的代码

import javax.swing.*;
import java.awt.event.*;
import java.sql.*;

class Conn extends JFrame implements ActionListener 
{
        JFrame frame = new JFrame("login page");
        JLabel fname,lname,pn;
        JTextField fname1,lname1,pn1;
        JButton sbmt,updt,dlt,slct;

        static Connection conn;

    Conn()
    {
        fname = new JLabel("First name");
        fname.setBounds(5,50,100,20);

        fname1 = new JTextField(10);
        fname1.setBounds(100,50,100,20);

        lname = new JLabel("Last Name");
        lname.setBounds(5, 100, 100,20);

        lname1 = new JTextField(10);
        lname.setBounds(100,100,100,20);

        pn = new JLabel("Phone No.");
       pn.setBounds(50, 50, 50, 50);

        pn1 =  new JTextField(10);
        pn1.setBounds(50,50,50,50);

        sbmt = new JButton("Insert");
        sbmt.setBounds(50,50,50,50);


        add(fname);
        add(fname1);

        add(lname);
        add(lname1);

        add(pn);
        add(pn1);

        add(sbmt);

        sbmt.addActionListener(this);

    }

  public void actionListener(ActionEvent e)
  {
      if (e.getSource()==sbmt)
      {
          System.out.println("sbmt button clicked");
      }
  }

    public static void main(String[] args) {

        try
        {
            Class.forName("oracle.jdbc.OracleDriver");
            conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","username","password");
             conn.close();
        }
        catch(ClassNotFoundException | SQLException e)
                {
                    System.out.println(e);

                }


        Conn con = new Conn();

        con.setSize(400,400);
        con.setLayout(null);
        con.setVisible(true);
    }    
}

输出:

/home/jayu/NetBeansProjects/projects/conn/src/conn/Conn.java:5: error: Conn is not abstract and does not override abstract method actionPerformed(ActionEvent) in ActionListener
class Conn extends JFrame implements ActionListener 

编译器:NetBeans

我该如何解决此错误,我不想删除implements ActionListener 。请任何人在不删除`implement ActionListener的情况下纠正此错误。

4 个答案:

答案 0 :(得分:5)

实际上,错误消息说明了一切。 在您的情况下,您添加了方法:

public void actionListener(ActionEvent e)

但这实际上应该是:

public void actionPerformed(ActionEvent e)

因为这是您正在实现的接口中的实际方法。

答案 1 :(得分:2)

因为您的课程实现了接口

public interface ActionListener extends EventListener {
    void actionPerformed(ActionEvent var1);
}

您需要实现该方法:

@Override
public void actionPerformed(ActionEvent actionEvent) {...}

我认为此方法的名称错误:

public void actionListener(ActionEvent e){...}

因此将其重命名为actionPerformed,它应该可以工作。

答案 2 :(得分:1)

如果要保留接口ActionListener,则必须实现该方法。 只需将actionListener()的名称切换为actionPerformed()。否则,您还可以保留actionListener()并实现actionPerformed(),以便他什么都不做

@Override
public void actionPerformed(ActionEvent e) {}

答案 3 :(得分:0)

从您的类中删除ActionListener实现:

class Conn extends JFrame

删除您的actionListener方法并添加它而不是sbmt.addActionListener(this);

 sbmt.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
             if (e.getSource()==sbmt)
              {
                  System.out.println("sbmt button clicked");
              }

        }
    });

编辑:

我想念您不想删除ActionListener实现,所以正如其他人已经说过的那样,您必须更改方法:

public void actionListener(ActionEvent e)

{

进入:

@Override
public void actionPerformed(ActionEvent e){
}