0

現在、プログラムで大きな問題が発生しています。「MyEventA is not abstract and does not override abstract method actionPerformed(java.awt.event.actionEvent) in java.awt.event.ActionListener.」というエラー メッセージがわかりません。インターネットや教科書を見てみましたが、まだうまくいきません。

誰かが私のコードの何が問題なのかを理解するのを手伝ってくれたら本当にありがたいです. 私はこれに1時間半取り組んでいますが、まだ修正していません。:( 前もって感謝します!

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);
    }
}
}
4

4 に答える 4

1

ActionListener インターフェイスを実装している場合は、actionPerformed(java.awt.event.ActionEvent) メソッドをオーバーライドする必要があります。インターフェイスのメソッドがオーバーライドされていない場合、コンパイラは、クラスを抽象として宣言するように要求します。

于 2013-04-08T03:53:56.363 に答える
1

MyEventA実装されActionListenerており、抽象クラスではないため、メソッドを実装/定義する必要がありますactionPeformed (ActionEvent)ButtonListener

しかし、あなたがやりたいことは、実際にはMyEventA実装せず、代わりに aをボタンActionListenerに渡すことだと思いますnew ButtonListener ()

plus.addListener (new ButtonListener ());
于 2013-04-08T04:03:34.597 に答える
1

次のように書き直してください。

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);
            }
        }
    }

    @Override
    public void actionPerformed(ActionEvent e) {// was to be implemented

        javax.swing.JOptionPane.showMessageDialog(null, "clicked");

    }

    public static void main(String[] args) {// main method should be in the outer class
        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);
    }

}

actionPerformedinクラスを使用する場合ButtonListenerは、次のコードを使用します。

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(new ButtonListener(jtfCurrent));
        minus.addActionListener(new ButtonListener(jtfCurrent));
        reset.addActionListener(new ButtonListener(jtfCurrent));
        quit.addActionListener(new ButtonListener(jtfCurrent));
        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() {

        }
        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);
            }
        }

    }

    @Override
    public void actionPerformed(ActionEvent e) {

        javax.swing.JOptionPane.showMessageDialog(null, "clicked");

    }

    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);
    }

}
于 2013-04-08T04:14:17.433 に答える