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)
而不是这个:
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)