【发布时间】:2020-07-24 08:12:22
【问题描述】:
所以,我有一个扩展 JPanel 并通过paintComponent 在矩阵中显示点的对象。在特定条件下,矩阵的点可以移动、消失或成倍增加,我想像这样自动显示它们随时间的演变:
for(int i = 0; i < 100; ++i){
matrix = calculateNextMatrix(); //Calculate possible movements, deaths or births of dots
myGraphic.updateMatrix(matrix); //Pass new dots to the JPanel object
myGraphic.repaint(); //Draw new dots
Thread.sleep(100); //Wait 0.1 seconds for next iteration (yes, this should be in a
//try-catch)
}
但是,我只在循环完成后的最后一次迭代中绘制,并且之前对 repaint() 的所有调用基本上都被忽略了。如果我一次只进行一次迭代(例如,通过手动按钮按下),我没有问题。
有没有办法自动获得多个定期重绘调用?
【问题讨论】:
-
是的,因为重绘意味着,用那个新东西重绘它,意味着删除以前存在的所有东西
-
有没有办法自动获得多个定期重绘调用? - 您使用
Swing Timer来安排动画。这意味着您的代码需要重组以将参数传递给您的代码以指示当前的“状态”。阅读 How to Use Timers 上的 Swing 教程中的部分以获取更多信息。查看:stackoverflow.com/a/33907282/131872 为例。在您的情况下,您将在您的类上调用一个方法以将状态设置为下一次迭代,然后调用 repaint()。 -
你是如何开始你的循环的?如果你在 EDT 上启动它,比如按下按钮时,那么你会占用 EDT,直到你的循环完成,然后 EDT 可以更新,但你会在最后。