JAVA SWING-使用SWING计时器创建动画

JAVA SWING-使用SWING计时器创建动画,java,swing,timer,flags,cardlayout,Java,Swing,Timer,Flags,Cardlayout,我正在尝试设置一个程序,使用户可以在单击“下一步”和“上一步”按钮时显示转换。按下“下一步”时,摆动计时器将触发并启动动画。当过渡时,应该有一个标志表明它处于过渡期。摆动计时器应每十分之一秒触发一次,基本上持续1秒 public class guiCreation { static Timer timer; static boolean flag = false; private static void guiInterface() { next.addActionListener(new A

我正在尝试设置一个程序,使用户可以在单击“下一步”和“上一步”按钮时显示转换。按下“下一步”时,摆动计时器将触发并启动动画。当过渡时,应该有一个标志表明它处于过渡期。摆动计时器应每十分之一秒触发一次,基本上持续1秒

public class guiCreation {
static Timer timer;
static boolean flag = false; 
private static void guiInterface() {
next.addActionListener(new ActionListener(){
            timer = new Timer(1000, this);
            public void actionPerformed(ActionEvent e){
                nextGest();
            }
        });
        //should go to the next tab
        previous.addActionListener(new ActionListener(){
            //if the list gets to the beginning, disable button
            public void actionPerformed(ActionEvent e){
                prevGest();
            }
        });
}
public static void nextGest() {
        timer.start();
        previous.setEnabled(true);
        next.setEnabled(true);
        //if the list gets to the end, disable button
        if (cardLayout.isNextCardAvailable()) {
            status.setText(" Next button has been clicked");
            //System.out.println("This is the" + size);
            cardLayout.next(cardPanel);
            next.setEnabled(cardLayout.isNextCardAvailable());
        }
    }
    public static void prevGest() {
        if (cardLayout.isPreviousCardAvailable()) {
            timer.start();
            next.setEnabled(true);
            previous.setEnabled(true);
            status.setText(" Previous button has been clicked");
            cardLayout.previous(cardPanel);
            previous.setEnabled(cardLayout.isPreviousCardAvailable());
        }
    }

}
此:
“摆动计时器应每十分之一秒触发一次…”
--与此不一致:
计时器=新计时器(1000,此)计时器每秒触发一次,而不是每10秒触发一次

相反,你应该:

  • 创建一个新的计时器(100,…)
,每10秒触发一次
  • 在实例字段中存储计时器开始时的开始时间(可能在按钮的ActionListener中这样做)
  • 在计时器的ActionListener中,获取当前毫秒数,并使用它检查经过的时间
  • 通过
    ((Timer)e.getSource()).Stop()停止计时器经过1整秒后
  • 不需要标志,因为您只需检查计时器是否为空,以及它是否
    .isRunning()
    。e、 例如,
    如果(timer!=null&&timer.isRunning()){
    --则动画正在继续
  • 无关建议:

    • 离开静态世界,进入实例世界。你正在用Java编程,这是一种从一开始就使用OOPs的语言,你不想与OOPs范式抗争
      • 此:
        “摆动计时器应每十分之一秒触发一次…”
        --不同意此:
        计时器=新计时器(1000,此);
        您的计时器每秒钟触发一次,而不是每十分之一秒

        相反,你应该:

        • 创建一个新的计时器(100,…),每10秒触发一次
        • 在实例字段中存储计时器开始时的开始时间(可能在按钮的ActionListener中这样做)
        • 在计时器的ActionListener中,获取当前毫秒数,并使用它检查经过的时间
        • 经过一整秒钟后,通过
          ((Timer)e.getSource()).Stop();
          停止计时器
        • 不需要标志,因为您只需检查计时器是否为空,以及它是否为
          .isRunning()
          。例如,
          如果(Timer!=null&&Timer.isRunning()){
          ,则动画将继续
        无关建议:

        • 离开静态世界,进入实例世界。你正在用Java编程,这是一种从一开始就使用OOPs的语言,你不想与OOPs范式抗争

        另外:在动画方面,我不知道你是否能帮我,但我正在尝试实现一个翻页动画,每10秒,它应该显示当前页面和底部页面的百分比,随着动画的继续和结束,它应该显示下一页。我将如何在e timer?只需在计时器中每次打印百分比。(这样,每次更新时,它都会查找并打印@ghart145的值)@ghart145:这是一个新的问题,应该这样问,而不是附加到这个问题上。另外:关于动画,我不知道你是否能帮我解决这个问题,但我正在尝试实现一个翻页动画,在每10秒的时候,它应该显示当前页面和底部页面的百分比,就像动画的内容一样nues并到达最后,它应该显示下一页。我如何在计时器中进行测试?只需在计时器中每次打印百分比。(这样,每次更新时,它都会找到并打印值@ghart145)@ghart145:这是一个新问题/问题,应该这样问,而不是附加到这个问题上“摇摆计时器应该启动”OP应该问一个问题。你的是什么?“摇摆计时器应该启动”OP应该问一个问题。你的是什么?