按下另一个按钮时,计时器不起作用(小程序)

时间:2016-04-06 12:07:40

标签: java timer applet awt

我正在制作一个有两个按钮的小程序:退后一步。 我在每个按钮中都有相同的计时器来执行动画。如果我向前推一步它工作正常,动画就会运行,但是如果我向后退一步,动画就不会运行或运行不好(在错误的位置和速度)。 我想问题是计时器没有正确停止并且在再次启动计时器时正在运行,但我不知道如何解决它。

这是前进按钮的代码:

//Code of the button "Paso a Paso"
        this.botonPasoAPaso = new JButton("Paso a paso");
            this.botonPasoAPaso.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {

            //Avoid timer to accelerate 
            if (timer != null && timer.isRunning()) {
                timer.stop();
            }                           
            //Code of the timer, makes an animation 
            timer = new Timer(35, new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    if (pasoAPaso <= listaPaquetes.size()) {
                        Paquete p = listaPaquetes.get(pasoAPaso);
                        p.animar();
                        panelGrafo.removeAll();
                        panelGrafo.updateUI();
                        panelGrafo.setPaquete(p);
                        panelGrafo.setAnimar(true);
                        panelGrafo.repaint();                           
                    }                       
                }
            });

            timer.start();  

            pasoAPaso++;                
        }           
    });

这是后退按钮的代码:

    this.botonAtras.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent arg0) {
            if (timer != null && timer.isRunning()) {
                timer.stop();
            }


            timer = new Timer(35, new ActionListener() {
                public void actionPerformed(ActionEvent e) {

                    if (pasoAPaso < listaPaquetes.size() && pasoAPaso>=0) {

                        Paquete p = listaPaquetes.get(pasoAPaso);
                        p.animar();
                        panelGrafo.removeAll();
                        panelGrafo.updateUI();
                        panelGrafo.setPaquete(p);
                        panelGrafo.setPasoAPaso(pasoAPaso);
                        panelGrafo.setAnimar(true);
                        panelGrafo.repaint();
                        //Actualizar matriz del render para pintar celdas
                        RenderTabla.matrizTotal = new Cuadrado[pasos.get(pasoAPaso).length][pasos.get(pasoAPaso)[0].length];
                        RenderTabla.matrizTotal = pasos.get(pasoAPaso);
                        tabla.introducirDatos(pasos.get(pasoAPaso),false);                          
                    }                       
                }
            });

            timer.start();                  

            pasoAPaso--;            

        }                   
    });

This is a video of the applet to see what's happening 如果你看到视频,当我点击“Paso a Paso”(前进)按钮时,卡车会动画,但当我点击“倒带”(后退)按钮时,它不起作用(看起来像卡车但是没有正确动画),如果我再次点击没有任何反应。

感谢。

0 个答案:

没有答案