我正在尝试实现一个做一些动画的小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速(最慢,慢,中等);
谢谢,
内特
答案 0 :(得分:2)
不,你不需要直接使用Threads,因为你可以简单地使用Swing Timer来驱动动画(虽然理解它在幕后使用线程)。我会让你的动画组件扩展JPanel,并在其paintComponent方法中绘制。我会避免让任何gui或“view”类扩展一个监听器类,因为你正在做一个单独的类做得太多。我要么使用匿名内部侦听器,要么使用私有内部类侦听器,或者使用复杂的独立侦听器类。
另一个警告 - 确保paintComponent方法仅绘制和绘制,它不包含程序逻辑,并避免在此方法中创建类或读取图像。它需要精益和快速。
答案 1 :(得分:1)
我喜欢动画的javax.swing.Timer
;这是一个简单的applet example。