Mostrar una cuenta regresiva

Necesito un temporizador implementado en mi aplicación, que va a hacer una cuenta regresiva de 10 segundos – 0 sec.
y, visualización de la cuenta atrás en un JLabel.

Aquí mi aplicación;

...
Timer t = new Timer(1000, new List());
        t.start();

}

class List implements ActionListener{

    @Override
    public void actionPerformed(ActionEvent e) {
        int sec = 0;
        label.setText(""+sec);
        //Do a if- condition check to see if the clock has reached to, and then stop

    }

}

Yo estaba esperando el JLabel para empezar a contar a partir de 0 – 10 y luego se detiene. Pero no es así. El JLabel establecer el valor 0 y no se incrementa.

ACTUALIZACIÓN de 1

    t = new Timer(1000, new Listner());
    t.start();


}

class Listner implements ActionListener{
    private int counter = 0;
    @Override
    public void actionPerformed(ActionEvent e) {
        lable.setText(""+ (counter++));

        if (counter == 10)
              t.removeActionListener(this);

    }

}
InformationsquelleAutor user1315906 | 2012-12-10

4 Kommentare

  1. 4

    No almacenar ni el incremento de los secs en cualquier lugar, así que no veo cómo debe actualizarse, intente con

    Timer timer;
    
    void start() {
      timer = new Timer(1000,new List());
    }
    
    class List implements ActionListener {
        private counter = 0;
        @Override
        public void actionPerformed(ActionEvent e) {
            label.setText(""+counter++);
    
            if (counter == 10)
              timer.removeActionListener(this);
        }
    }

    Mente que usted necesita para almacenar una referencia para el temporizador en algún lugar para ser capaz de eliminar el oyente de que una vez que la cuenta atrás ha terminado.

    • no el contador empieza desde 0 cada vez que el actionPerformed se llama?
    • No. private counter = 0; se crea cuando la clase es creada. En actionPerformed la counter se incrementa sólo.
    • ohh yeah mi mal no ver que se trata de una variable de clase….gracias
    • Por lo tanto, es private int counter=0 ? Hice ese cambio, pero todavía no consigue incrementa. Veo el texto 9. y no se incrementa o decrementa.
    • Pero, ¿cambiar el código dentro de actionPerformed para uso counter en lugar de que su variable local?
    • He actualizado mi post, con el código. No veo el incremento del contador. Ayuda
    • Me ordenó. Gracias.
    • aaaaaaaaaaaaach no timer.removeActionListener(this); pero timer.stop(:-) por favor
    • en realidad, depende de cómo muchas de las tareas que usted tenga sobre él.
    • whaaaaaaat 🙂 🙂 🙂

  2. 4

    Bien cada vez que el temporizador se llama declara la variable int sec a 0. Por lo tanto la Etiqueta no se actualiza.

    Usted debería declarar la sec variable como una variable global y, a continuación, en el método actionPerformed incremento de su valor cada vez que es llamado.

     public int sec = 0;
     class List implements ActionListener{
    
       @Override
       public void actionPerformed(ActionEvent e) {
            sec++;
            label.setText(""+sec);
            //Do a if- condition check to see if the clock has reached to, and then stop
    
      }
    
    }
    • Recomiendo intercambiar el orden & hacer sec un atributo de la clase de escucha. E. G. class List implements ActionListener{ private int sec = 0; ..
    • El contador no empezar desde 0. en lugar de eso, se inicia desde 8 y, a continuación, termina en 9. Esto es debido a que estoy parando el cronómetro en 10
  3. 3

    Un ejemplo completo

    public class ATimerExample {
    
        Timer timer;
        int counter = 0;
    
        public ATimerExample() {
            final JFrame frame = new JFrame("somethgi");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            final JLabel label = new JLabel("0");
            JPanel panel = new JPanel();
            panel.add(label, BorderLayout.SOUTH);
            frame.getContentPane().add(panel);
            frame.pack();
            frame.setVisible(true);
    
            timer = new Timer(1000, new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    label.setText(String.valueOf(counter));
                    counter++;
                    if (counter == 10) {
                        //timer.removeActionListener(this);
                          timer.stop();
                    }
                }
            });
            timer.start();
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
    
                @Override
                public void run() {
                    new ATimerExample();
                }
            });
        }
    }
  4. 1

    Desde java lee el tiempo en milisegundos, debe ser 10000 en lugar de 1000. pruebe el código y ver si funciona. Tuve el mismo problema cuando quise 30 segundos. Y en lugar de escribir Temporizador t = new Timer(30000, new List()); t.start();

    Escribí Temporizador t = new Timer(3000, new List());
    t.start();

    Que hizo que mi programa se detenga después de cada 3 segundos. Me atrevería a sugerir que el uso de 10000 en lugar de 1000.

    Recordar hacer: t.stop() en tu Lista de la clase. Gracias

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Recent Articles

Python «set» con duplicados/elementos repetidos

Hay una forma estándar de representar un "conjunto" que puede contener elementos duplicados. Como yo lo entiendo, un conjunto tiene exactamente un cero o...

Python: generador de expresión vs rendimiento

En Python, ¿hay alguna diferencia entre la creación de un generador de objetos a través de un generador de expresión versus el uso de...

Cómo exportar/importar la Masilla lista de sesiones?

Hay una manera de hacer esto? O tengo que tomar manualmente cada archivo de Registro? InformationsquelleAutor s.webbandit | 2012-10-23

no distingue mayúsculas de minúsculas coincidentes en xpath?

Por ejemplo, para el xml a continuación <CATALOG> <CD title="Empire Burlesque"/> <CD title="empire burlesque"/> <CD...