2017-03-03 32 views
1

我做了一個簡單的形狀程序,在JPanel內動畫一個球。我的公共類形狀標記一個錯誤說形狀不是抽象的(見下圖)動畫球JPanel子類不是抽象錯誤

形狀沒有抽象的和ActionListener

Abstract error Screenshot

形狀不重寫抽象方法actionPerformed(ActionEvent)。 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(); 
    } 
} 

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"); 
    } 
} 
+0

注意的paintComponent的'不正確的拼寫()'。 – trashgod

回答

5

取而代之的是:

import javafx.event.ActionEvent; 

你可能想這樣的:

import java.awt.event.ActionEvent; 

在你執行paintComponent()actionPerformed(),使用@Override,該「告知編譯器,該元素是意味着覆蓋在超類中聲明的元素。「編譯器可以幫助您識別拼寫和類型錯誤。

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

    @Override 
    public void actionPerformed(ActionEvent e) {…} 
} 

您可以覆蓋getPreferredSize()以反映您選擇的幾何圖形。另外,考慮重構數字常量。

@Override 
public Dimension getPreferredSize() { 
    return new Dimension(560, 360); 
} 

image