如何使用摇摆计时器开始/停止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。
祝你好运