如何使用摇摆计时器来启动/停止动画

时间:2011-11-10 23:49:06

标签: java swing animation timer applet

有人可以教我如何使用具有以下目的的swing timer

当我点击鼠标时,我需要有一个开始动画的多边形(简单的动画,如旋转);当我再次点击时停止制作动画。

我在理解MouseListener的工作方式时没有问题,但是使用实际的动画。我尝试在paint()方法中使用while块模拟动画,我将绘制,擦除和重绘多边形(例如模拟旋转),但在while内部,applet不会听取点击。它会在一段时间之后才会收听。当我点击鼠标时,我需要摆动计时器才能打破。

3 个答案:

答案 0 :(得分:7)

import javax.swing.Timer;

添加属性;

Timer timer; 
boolean b;   // for starting and stoping animation

将以下代码添加到frame的构造函数中。

timer = new Timer(100, new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent ae) {
        // change polygon data
        // ...

        repaint();
    }
});

覆盖paint(Graphics g)并从actionPerformed(e)修改的数据中绘制多边形。

最后,启动/停止动画的按钮在其事件处理程序中具有以下代码。

if (b) {
    timer.start();
} else {
    timer.stop();
}
b = !b;

答案 1 :(得分:2)

example使用按钮控制javax.swing.Timer,而此相关example响应鼠标点击。后一个示例在每次单击时反转方向,但开始/停止是一个简单的更改。

答案 2 :(得分:1)

小程序不会听取点击,因为主线程(事件发送线程,EDT)在while循环中,并且没有收听你的点击。

你需要另一个线程。 (尝试使用SwingWorker http://download.oracle.com/javase/tutorial/uiswing/concurrency/worker.html

因此,SwingWorker将在后台执行while循环,发布结果以使多边形移动。

然后,EDT可以专注于任何事件(如点击)。然后,如果要停止,可以使用click-event杀死SwingWorker。

祝你好运