我有以下场景:如果我在paint()
方法中有一个while块(例如用于模拟一个简单的动画,例如旋转多边形,通过多个绘图完成并擦除图形),是否存在在applet中单击鼠标时打破while块的方法吗?
多边形的动画在不调用paint()
方法的情况下完成。如果while块看起来像这样,那么也可以这样做:
while (count<n)
{
//code that draws the polygon rotating
count++;
}
答案 0 :(得分:1)
是的,有一个场景可以保持你的while循环。
最简单的方法是在类文件private boolean stopLoop=false
中设置一个变量,并在while循环中检查此属性while (!stopLoop)
。
现在,MouseEvent只设置了属性stopLoop=true
,您就完成了(如果您需要帮助,请How to Write a Mouse Listener
另一个解决方案是使用@camickr提到的Swing Timer(参见其他答案)。让我们假设您在paint()
方法之外有一个通用的Timer方法。然后你不能在那里使用while循环。我建议只绘制静态图片,如果你想让你的poligon旋转,只需绘制下一个,但是用另一个角度等等。
这个想法是你将while循环切换到Timer方法中,因此paint()
被调用很多次。如果你想阻止poligon盘旋,请使用布尔标志或停止计时器。在第一种情况下,如果处理布尔变量并且鼠标事件正确,则可以处理多个多边形,并且每个多边形都可以启动和停止。
如果您还有其他问题,请添加更多细节,或者bedder向我们展示一些最小化的代码。
答案 1 :(得分:1)
不要使用while循环。
而是使用Swing Timer来安排动画。然后您可以根据需要简单地启动/停止计时器。