我正在编写一个程序来输入一个数字并在小程序上绘制该数量的随机颜色和位置的圆圈。我整晚都没睡,试图找出如何在每个圆圈出现之间添加延迟。现在,如果我有一个带有延迟的 for-each 语句,并说我输入 20 个圆圈并延迟 1000,那么它在 20 秒内不会执行任何操作,然后所有圆圈都会立即出现,因为在paint()方法结束之前屏幕不会刷新。
我能想到的唯一其他替代方法是在 start() 方法中使用 for-each 语句,该语句将颜色和坐标添加到数组中,并让 Paint() 方法绘制该数组中的所有圆圈。我可能是错的,但我想这会消耗太多的内存。
另一种可能性是在现有框架上添加一个圆圈而不清除它,但我找不到方法来做到这一点。
最佳答案
使用 javax.swing.Timer
将新的 Circle
对象添加到可扩展列表,例如 ArrayList
。每次添加后调用repaint()
。在paintComponent(Graphics)
中绘制列表中的每个Circle
。
更新
不幸的是,我现在无法添加评论(请参阅 External JS failed to load 了解血淋淋的细节)。因此,我将其添加为编辑。
@mKorbel:不,我确定还没有在 1.6.0_26 上尝试过!如果我尝试过的话,我就会发布代码。 ;)
@Tycho:我没有注意到你添加了 awt标记并假定您正在使用 Swing。
你真的使用AWT吗? (如果是这样。)为什么?
<小时/>@Tycho: "The only thing I could tell by quickly searching was that Swing is used more for user interfaces, which is not what I'm going for here."
嗯.. AWT 和 Swing(使用 Applet
/JApplet
或 Frame
/JFrame
)用于开发图形用户界面。或者换句话说,无论是使用 AWT 或 Swing,还是开发小程序或自由 float 框架,您都在开发 (G)UI。
小程序可以扩展 java.applet.Applet
(AWT) 或 javax.swing.JApplet
(Swing)。
如果您的小程序扩展了 Applet
,请将其更改为 Swing JApplet
。很少有 GUI 开发人员能够很好地记住 AWT 并对其提供好的建议。我的建议都与JApplet
/Swing 有关。使用 AWT 是行不通的。
关于java - 如何在 Java Applet 中的绘图之间进行延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6476714/