使用Swing和Threads设计JApplet动画

时间:2011-03-14 02:17:19

标签: java swing animation applet

我正在尝试实现一个做一些动画的小Applet。我想在JPanel和动画JPanel下面做动画,有播放/暂停,并跳过按钮来控制动画。要正确执行此操作,我认为我需要在Thread中创建动画。 (正确的吗?)

我的问题是:什么是为这个应用程序组织我的类的好方法?如何让我的动画线程在JPanel中运行?

我一直在寻找oracle.com的教程,这就是我到目前为止所拥有的......

Class AnimationApplet extends JApplet {

...

    public void init(){
        try {
            SwingUtilities.invokeAndWait(new Runnable() {
                public void run() {
                    createGUI();
                }
            });
            } catch (InterruptedException ex) {
                Logger.getLogger(TabApplet.class.getName()).log(Level.SEVERE, null, ex);
            } catch (InvocationTargetException ex) {
                Logger.getLogger(TabApplet.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

     private void createGUI() {
        AnimationPanel ac = new AnimationPanel();
        this.setConentPane(ac);
     }

} // Class AnimationApplet

class AnimationPanel extends JPanel implements ActionListener {
    ...
}

编辑:我不知道这是否会有所帮助,但这正是我想要做的。我正在创建一个吉他标签播放器,因此需要继续在屏幕上滑动音符,然后在某些点(第16个音符),检查是否有动画音符。这似乎很难,因为你不能均匀地将每分钟的节拍除以ms。所以现在,我想把它分成4或5速(最慢,慢,中等);

谢谢,

内特

2 个答案:

答案 0 :(得分:2)

不,你不需要直接使用Threads,因为你可以简单地使用Swing Timer来驱动动画(虽然理解它在幕后使用线程)。我会让你的动画组件扩展JPanel,并在其paintComponent方法中绘制。我会避免让任何gui或“view”类扩展一个监听器类,因为你正在做一个单独的类做得太多。我要么使用匿名内部侦听器,要么使用私有内部类侦听器,或者使用复杂的独立侦听器类。

另一个警告 - 确保paintComponent方法仅绘制和绘制,它不包含程序逻辑,并避免在此方法中创建类或读取图像。它需要精益和快速。

答案 1 :(得分:1)

我喜欢动画的javax.swing.Timer;这是一个简单的applet example