如何使用摇摆计时器开始/停止animation

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

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

我没有理解MouseListener工作方式,但与实际的animation。 我尝试使用paint()方法模拟animation,在该方法中绘制,擦除和重绘多边形(例如模拟旋转),但在此期间,小程序不会听取点击。 它只会在那个时候听。 当我点击鼠标时,我需要摆动计时器来打破这个时间。

 import javax.swing.Timer; 

添加属性;

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

将下面的代码添加到框架的构造函数。

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

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

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

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

此示例使用button控制javax.swing.Timer ,而此相关示例响应鼠标单击。 后面的例子反转每次点击的方向,但开始/停止是一个直接的变化。

该小程序不会听点击,因为主线程(事件调度线程,EDT)在while循环内,并且不在听您的点击。

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

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

然后美国东部时间可以专注于任何事件(如点击)。 如果你想停止它,你可以使用click事件杀死SwingWorker。

祝你好运