1

だから私はエラーが発生していますClass is not abstract and does not override abstract method actionPerformed(ActionEvent) in ActionListener

私はこのエラーの原因を認識していますが、混乱しているのは、その方法があることです。

public static ActionListener taskPerformer = new ActionListener(){
        public void actionPerformed(ActionEvent e){
        Clock cl = new Clock();
        if(seconds<59){
            seconds++;
        }else{
            seconds=0;
            if(minutes<59){
                minutes++;
            }else{
                minutes=0;
                if(hours<12){
                    hours++;
                }else{
                    hours=0;
                }
            }
        }

        cl.repaint();   
    }
};'

何が起こっているのかよくわかりません。何か助けはありますか?前もって感謝します。

編集: インポートと関連するメソッドを含むコンテキスト

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.lang.Object.*;
import java.text.DecimalFormat;
import java.awt.geom.*;


public class Clock extends JFrame implements ActionListener{
public static int seconds = 0;
public static int minutes = 0;
public static int hours = 9;

public static ActionListener taskPerformer = new ActionListener(){
        public void actionPerformed(ActionEvent e){
        Clock cl = new Clock();
        if(seconds<59){
            seconds++;
        }else{
            seconds=0;
            if(minutes<59){
                minutes++;
            }else{
                minutes=0;
                if(hours<12){
                    hours++;
                }else{
                    hours=0;
                }
            }
        }

        cl.repaint();   
    }
};
public static Timer timer = new Timer(1000, taskPerformer);

public static void main(String[] args){
    Clock cl = new Clock();
    init();
    SwingUtilities.invokeLater(new Runnable(){
        public void run() {
            createAndShowGUI();
        }
    });
}
public static void init(){
    timer.start();
}
public Clock() {
    super("Clock");
    timer.addActionListener(this);

}'
4

3 に答える 3

6

問題は、投稿した元のコード スニペットにはありませんでした。あなたのクラスClockは を実装していませんactionPerformed()taskPerformerオブジェクトはそうです。しかし、コードはそれがであると不平を言っていますtaskPerformerActionListener、Clock はそうではありません。

また、どこにも使用していないように見えるtaskPerformerので、なぜ匿名クラスが必要なのですか。actionPerformed()クロックで定義するだけで完了できます。

これに対処するには2つの方法があります。(テクニックをわかりやすくするために、無関係なコードをいくつか省略しました)。

オプション 1 - クロックをリスナーとして使用する

    public class Clock extends JFrame implements ActionListener {
    public static int seconds = 0;
    public static int minutes = 0;
    public static int hours = 9;

    public void actionPerformed(ActionEvent e) {
        // code
    }

    public Timer timer;

    public Clock() {
        super("Clock");
        timer = new Timer(1000, this);
        timer.addActionListener(this);    
    }
}

オプション 2 - 匿名リスナーを使用する

    public class Clock extends JFrame {
    public static int seconds = 0;
    public static int minutes = 0;
    public static int hours = 9;

    public static ActionListener taskPerformer = new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            // insert code here
        }
    };

    public static Timer timer = new Timer(1000, taskPerformer);

    public Clock() {
        super("Clock");
        timer.addActionListener(taskPerformer);    
    }
}
于 2013-09-15T15:21:56.143 に答える
1

ActionEvent e次のように置き換えjava.awt.event.ActionEvent eます。

@Override  
public void actionPerformed(java.awt.event.ActionEvent e) {
    //do something here
}

私のために働いた。

于 2016-10-06T19:31:50.067 に答える