我想建立一个三个球朝一个方向运动的简单动画。因此我创建了一个计时器,它在每一个滴答声中编辑球的坐标,但是当我试着运行它的时候球就扭曲了。它们正以正确的速度和方向移动,但是当它们改变坐标的时候我想移除旧的球。我试着在paint
方法中添加super.paint()
。它It“我们正在删除旧球,但大多数时候帧只是白色的。
public class Animation extends JFrame{
private JPanel panel2;
int maus1x = 110;
int maus1y = 350;
int maus2x = 55;
int maus2y = 350;
int maus3x = 0;
int maus3y = 350;
ActionListener timeListener = new TimeListener();
Timer timer = new Timer(100,timeListener);
public Animation() {
this.setContentPane(this.panel2);
this.setTitle("MausKampf");
this.setSize(500, 500);
this.setResizable(false);
this.setVisible(true);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
timer.start();
}
public void paint(Graphics g) {
Graphics2D g2D = (Graphics2D) g;
g2D.setColor(Color.black);
g2D.drawLine(0,400,500,400);
g2D.drawLine(0,350,225,350);
g2D.drawLine(275,350,500,350);
g2D.drawLine(225,350,225,0);
g2D.drawLine(275,350,275,0);
g2D.setPaint(Color.CYAN);
g2D.fillOval(maus1x,maus1y,50,50);
g2D.setPaint(Color.GREEN);
g2D.fillOval(maus2x,maus2y,50,50);
g2D.setPaint(Color.RED);
g2D.fillOval(maus3x,maus3y,50,50);
}
public void move() {
maus1x = maus1x + 4;
maus2x = maus2x + 4;
maus3x = maus3x + 4;
if (maus1x > 325) {
timer.stop();
}
repaint();
}
public class TimeListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
move();
}
}
}
1条答案
按热度按时间hpcdzsge1#
JFrame
。但是,如果要执行custom painting,则应编写一个扩展JPanel
的类并覆盖其paintComponent
方法,覆盖方法中的第一行应为:super.paintComponent(g);
我对你问题中的鳕鱼做了一些小改动。
Animation
扩展了JPanel
,而不是JFrame
。paint
重命名为paintComponent
,并添加了上面描述的行。main
,使其成为runnable。