我的程序现在遇到大麻烦。我不明白此错误消息“ MyEventA不是抽象的,并且不会覆盖java.awt.event.ActionListener中的抽象方法actionPerformed(java.awt.event.actionEvent)。”我尝试过在网上和教科书中查找内容,但仍然无法正常工作。

如果有人可以帮助我弄清楚我的代码出了什么问题,我将不胜感激。我已经花了一个半小时的时间来解决这个问题,但仍然没有解决。 :( 提前致谢!

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

public class MyEventA extends JFrame implements ActionListener
{
    private JButton plus;
    private JButton minus;
    private JButton reset;
    private JButton quit;

    public MyEventA()
{
    add(new JLabel("Current Value", JLabel.LEFT), BorderLayout.NORTH);
    JTextField jtfCurrent = new JTextField("0");
    add(jtfCurrent, BorderLayout.EAST);
    JPanel jpSouth = new JPanel();
    plus = new JButton("+");
    minus = new JButton("-");
    reset = new JButton("Reset");
    quit = new JButton("Quit");
    ButtonListener b1 = new ButtonListener(jtfCurrent);
    jtfCurrent.addActionListener(b1);
    plus.addActionListener(this);
    minus.addActionListener(this);
    reset.addActionListener(this);
    quit.addActionListener(this);
    jpSouth.add(plus);
    jpSouth.add(minus);
    jpSouth.add(reset);
    jpSouth.add(quit);
    add(jpSouth, BorderLayout.SOUTH);
}

class ButtonListener implements ActionListener {
    private JTextField writeInto;   // text field reference
    private int count = 0;

    public ButtonListener(JTextField tf) {
        writeInto = tf;
        count = 0;
    }

    public void actionPerformed(ActionEvent ae){
        if(ae.getActionCommand().equals("+")){
            count++;
            writeInto.setText("" + count);
        }
        else if(ae.getActionCommand().equals("-")){
            count--;
            writeInto.setText("" + count);
        }
        else if(ae.getActionCommand().equals("Reset")){
            count = 0;
            writeInto.setText("" + count);
        }
        else {
            System.exit(0);
        }
    }

    public static void main(String[] args){
        MyEventA events = new MyEventA();
        events.setTitle("Part 2 Using getSource");
        events.pack();
        events.setDefaultCloseOperation(EXIT_ON_CLOSE);
        events.setSize(300,100);
        events.setLocation(200,200);
        events.setVisible(true);
    }
}
}

最佳答案

通常,当一个(非抽象的)类implements接口时,会约定该类将实现该接口中提供的所有方法。

您的类MyEventA implements接口ActionListener,它需要重写一个方法(void actionPerformed(ActionEvent))。由于MyEventA不是抽象的,因此编译器告诉您需要在此处实现该方法。

如果您想知道如何实现该方法,则在实现的子类(ButtonListener)中有一个很好的示例。在这里,您可以看到ButtonListener实现相同的接口ActionListener,并实现其方法。

09-28 11:55