Animate ball JPanel子类不是抽象错误

1 java oop swing abstraction jpanel

我制作了一个简单的形状程序,可以在一个内部激活一个球JPanel.我的公共类形状正在标记一个错误,说形状不是抽象的(见下面的截图)

形状不是抽象的,不重写抽象方法actionPerformed(ActionEvent)在ActionListener

抽象错误截图

Shape.java:

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionListener;
import java.awt.geom.Ellipse2D;
import javafx.event.ActionEvent;
import javax.swing.*;

 public class Shape extends JPanel implements ActionListener {
    Timer t = new Timer(5, this);

    double x = 0;
    double y = 0;
    double velX = 2;
    double velY = 2;

   public void painComponent(Graphics g) {
       super.paintComponent(g);
       Graphics2D g2 = (Graphics2D) g;
       Ellipse2D circle = new Ellipse2D.Double(x, y, 40, 40);

       g2.fill(circle);
       t.start(); 
   }

   public void actionPerformed(ActionEvent e) {
       if (x < 0 || x > 560) {
           velX = -velX;
       }

       if(y < 0 || y > 360) {
           velY = -velY;
       }

       x += velX;
       y += velY;
       repaint();
   }
}
Run Code Online (Sandbox Code Playgroud)

Main.java:

import javax.swing.JFrame;

public class Main {
    public static void main(String[] args) {
        Shape s = new Shape();
        JFrame f = new JFrame();
        f.add(s);
        f.setVisible(true);
        f.setSize(600,400);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setTitle("Moving Ball");
    }
}
Run Code Online (Sandbox Code Playgroud)

tra*_*god 5

而不是这个:

import javafx.event.ActionEvent;
Run Code Online (Sandbox Code Playgroud)

你可能想要这个:

import java.awt.event.ActionEvent;
Run Code Online (Sandbox Code Playgroud)

在你的实现paintComponent()和actionPerformed(),使用@Override,其中"通知该元素是为了覆盖超类的一个元素编译器." 然后,编译器可以帮助您识别拼写和类型错误.

public class Shape extends JPanel implements ActionListener {
    …
    @Override
    public void paintComponent(Graphics g) {…}

    @Override
    public void actionPerformed(ActionEvent e) {…}
}
Run Code Online (Sandbox Code Playgroud)

您可以覆盖getPreferredSize()以反映所选的几何体.另外,请考虑重构数字常量.

@Override
public Dimension getPreferredSize() {
    return new Dimension(560, 360);
}
Run Code Online (Sandbox Code Playgroud)

图片