如何使用Swing制作动画?

我正在制作一个JApplet并且遇到动画问题。

这是我的代码:

this.sprite.setBounds(0,0,20,17); this.sprite.setIcon(this.rangerDown); for(int i = 0; i< 16;i++) { this.sprite.repaint(); this.sprite.setLocation(this.sprite.getX(), this.sprite.getY()+10); try{ Thread.currentThread().sleep(100); }catch(InterruptedException e){ } } 

有了这个,没有动画:在循环过程中没有任何反应,repaint()方法似乎只在精灵停止移动时才会动作。

我想只使用Swing,任何关于如何进行的想法?

谢谢阅读。

您应该使用javax.swing.Timer来执行动画而不是Thread睡眠。 这是一个很好的链接,可以帮助您: http : //java.sun.com/docs/books/tutorial/uiswing/misc/timer.html

此外,我强烈建议您购买Filthy Rich Clients一书 – 如果您访问该网站,您还可以免费下载所有示例代码。 例如, 第12章:动画基础知识有一些很好的例子,例如演示Timer用法的MovingButton。

你遗漏了代码周围的代码,这让你有点难以帮助你。

您很可能遇到线程处理问题。 有一个Swing工作者线程负责显示你的东西; 如果你在那个线程内睡觉,它就无法完成它的工作。 如果您正在从此线程外部更改图像,那么它可能无法获取更改,因为您没有正确地与Swing线程同步。

你需要使用像SwingUtilities.invokeLater(Runnable r)之类的东西来完成这个,你的图像改变代码将在r的run()方法中。 如果你谷歌为“invokeLater”和Swing,你很可能会找到例子。