如何使用Swing制作动画?

时间:2009-11-05 19:22:53

标签: java swing animation

我正在制作一个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,有关如何进行的任何想法吗?

感谢阅读。

2 个答案:

答案 0 :(得分:4)

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

此外,我强烈建议您购买本书Filthy Rich Clients - 如果您访问该网站,您还可以免费下载所有示例代码。例如,Chapter 12: Animation Fundamentals有一些很好的示例,例如演示Timer使用情况的MovingButton。

答案 1 :(得分:1)

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

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

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