我正在编写一个程序来输入一个数字,并在applet上绘制随机颜色和位置的圈数。我一整夜都试图找出如何在出现的每个圆圈之间添加延迟。现在,如果我有一个for-each语句有延迟,并说我输入20个圈子并且延迟为1000,它将在20秒内没有做任何事情,那么所有圈子将立刻出现,因为在paint()方法结束之前,屏幕不会刷新。
我能想到的唯一另一个选择是在start()方法中有一个for-each语句,它会为数组添加颜色和坐标,并使用paint()方法绘制此数组中的所有圆圈。我可能是错的,但我想这会耗费太多的记忆。
另一种可能性是在现有框架上添加一个圆圈而不清除它,但我找不到办法做到这一点。
答案 0 :(得分:3)
使用javax.swing.Timer
将新Circle
对象添加到可扩展列表,例如ArrayList
。每次添加后调用repaint()
。在paintComponent(Graphics)
中抽取列表中的每个Circle
。
不幸的是我暂时无法添加评论(有关血腥的详细信息,请参阅External JS failed to load)。出于这个原因,我将其添加为编辑。
@mKorbel:不,我确定没有在1.6.0_26上尝试过!如果我完全尝试过,我会发布代码。 ;)
@Tycho:我没有注意到你添加了awt标签,并假设你正在使用Swing。
你真的使用AWT吗? (如果是的话。)为什么?
@Tycho:“我能通过快速搜索得到的唯一一点就是Swing更多地用于用户界面,这不是我要去的地方。”
嗯.. AWT 和 Swing(使用Applet
/ JApplet
或Frame
/ 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
}