有人可以教我如何使用具有以下目的的swing timer
:
当我点击鼠标时,我需要有一个开始动画的多边形(简单的动画,如旋转);当我再次点击时停止制作动画。
我在理解MouseListener
的工作方式时没有问题,但是使用实际的动画。我尝试在paint()
方法中使用while块模拟动画,我将绘制,擦除和重绘多边形(例如模拟旋转),但在while内部,applet不会听取点击。它会在一段时间之后才会收听。当我点击鼠标时,我需要摆动计时器才能打破。
答案 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。
祝你好运