Cor*_*gle 1 java swing overriding abstract actionlistener
所以我收到了错误 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();
}
};'
Run Code Online (Sandbox Code Playgroud)
不太确定发生了什么.有帮助吗?提前致谢.
编辑:上下文包括导入和相关方法
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);
}'
Run Code Online (Sandbox Code Playgroud)
问题不在您发布的原始代码段中.你的类Clock没有实现actionPerformed().taskPerformer对象可以.但代码抱怨taskPerformer是一个ActionListener但Clock不是.
此外,您似乎没有在任何地方使用taskPerformer,所以为什么需要匿名类.你可以在Clock中定义actionPerformed()并完成它.
我认为有两种方法可以解决这个问题.(我省略了一些不相关的代码以使技术更清晰).
选项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);
}
}
Run Code Online (Sandbox Code Playgroud)
选项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);
}
}
Run Code Online (Sandbox Code Playgroud)