我正在尝试实现一个可以制作一些动画的小 Applet。我想在 JPanel 中和 Animation JPanel 下方制作动画,播放/暂停和跳过按钮来控制动画。为了正确地做到这一点,我想我需要在线程中制作动画。 (正确吗?)
我的问题是:组织此应用程序的类的好方法是什么?如何让我的动画线程在 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 个音符)检查是否有要设置动画的音符。这似乎有点困难,因为您不能将毫秒除以每分钟的节拍数。所以现在,我正在考虑将其分为 4 或 5 个速度(最慢、慢速、中速等);
谢谢,
内特
最佳答案
不,您不需要直接使用线程,因为您可以简单地使用 Swing 计时器来驱动动画(尽管了解这在幕后使用线程)。我会让我的动画组件像您所做的那样扩展 JPanel 并在其 paintComponent 方法中绘制。我会避免像上面那样让任何 gui 或“ View ”类扩展一个监听器类,因为这会使单个类做太多事情。我要么使用匿名内部监听器,要么使用私有(private)内部类监听器,或者如果复杂则使用独立的独立监听器类。
另一个警告——确保您的 paintComponent 方法只进行绘画和绘画,它不包含任何程序逻辑,并避免在该方法中创建类或读取图像。它需要精简和快速。
关于java - 使用 Swing 和 Threads 设计 JApplet 动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5294082/