如何在Java Applet中的绘图之间进行延迟

时间:2011-06-25 08:27:12

标签: java applet awt

我正在编写一个程序来输入一个数字,并在applet上绘制随机颜色和位置的圈数。我一整夜都试图找出如何在出现的每个圆圈之间添加延迟。现在,如果我有一个for-each语句有延迟,并说我输入20个圈子并且延迟为1000,它将在20秒内没有做任何事情,那么所有圈子将立刻出现,因为在paint()方法结束之前,屏幕不会刷新。

我能想到的唯一另一个选择是在start()方法中有一个for-each语句,它会为数组添加颜色和坐标,并使用paint()方法绘制此数组中的所有圆圈。我可能是错的,但我想这会耗费太多的记忆。

另一种可能性是在现有框架上添加一个圆圈而不清除它,但我找不到办法做到这一点。

2 个答案:

答案 0 :(得分:3)

使用javax.swing.Timer将新Circle对象添加到可扩展列表,例如ArrayList。每次添加后调用repaint()。在paintComponent(Graphics)中抽取列表中的每个Circle


更新

不幸的是我暂时无法添加评论(有关血腥的详细信息,请参阅External JS failed to load)。出于这个原因,我将其添加为编辑。

@mKorbel:不,我确定没有在1.6.0_26上尝试过!如果我完全尝试过,我会发布代码。 ;)

@Tycho:我没有注意到你添加了标签,并假设你正在使用Swing。

你真的使用AWT吗? (如果是的话。)为什么?


  

@Tycho:“我能通过快速搜索得到的唯一一点就是Swing更多地用于用户界面,这不是我要去的地方。”

嗯.. AWT Swing(使用Applet / JAppletFrame / JFrame)用于开发图形用户界面。或者换句话说,无论是使用AWT还是Swing,还是开发applet或自由浮动框架,您都在开发(G)UI。

applet扩展java.applet.Applet(AWT)或javax.swing.JApplet(Swing)。

如果您的applet扩展为Applet,请将其更改为Swing JApplet。很少有GUI开发人员能够很好地记住AWT,以便给出好的建议。我的建议都与JApplet / Swing有关。它无法使用AWT。

答案 1 :(得分:0)

使用计时器。例如,当您开始绘制圆圈时,请设置一个值:

   time_press = System.currentTimeMillis();
   circles_to_draw = 20;

然后在draw方法的某处,执行以下操作:

while(circles_to_draw > 0 && System.currentTimeMillis() < time_press + 1000)
{
    time_press += 1000;
    circles_to_draw --;

    //Draw your circle
}