Actualice una etiqueta con un temporizador de swing

Estoy teniendo problemas con este código.

Estoy iniciando un temporizador con un número aleatorio, y quiero actualizar un JLabel con la cuenta regresiva, cada segundo. Pero no he descubierto cómo hacerlo, ya que el único oyente que activa el temporizador está al final (eso lo sé).

aquí está el código:

int i = getTimer(maxWait); te1 = new Timer(i, this); label.setText(i+""); te1.start(); ... public int getTimer(int max){ Random generator = new Random(); int i = generator.nextInt(max); return i*1000; } ... public void actionPerformed(ActionEvent ev){ if(ev.getSource() == te1){ label.setText(i+""); te1.stop(); } } 

Realmente no entiendo tu pregunta por qué estás usando el Aleatorio, pero aquí hay algunas observaciones:

Quiero actualizar un JLabel con la cuenta atrás, cada segundo.

Luego necesita configurar el temporizador para disparar cada segundo. Entonces el parámetro para el temporizador es 1000, no un número aleatorio.

Además, en su método actionPerformed () detiene el temporizador la primera vez que se dispara. Si está realizando una cuenta regresiva de algún tipo, solo detendrá el temporizador cuando el tiempo llegue a 0.

Aquí hay un ejemplo simple de usar un temporizador. Simplemente actualiza el tiempo cada segundo:

 import java.awt.*; import java.awt.event.*; import java.util.*; import javax.swing.*; import javax.swing.Timer; public class TimerTime extends JPanel implements ActionListener { private JLabel timeLabel; public TimerTime() { timeLabel = new JLabel( new Date().toString() ); add( timeLabel ); Timer timer = new Timer(1000, this); timer.setInitialDelay(1); timer.start(); } @Override public void actionPerformed(ActionEvent e) { //System.out.println(e.getSource()); timeLabel.setText( new Date().toString() ); } private static void createAndShowUI() { JFrame frame = new JFrame("TimerTime"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add( new TimerTime() ); frame.setLocationByPlatform( true ); frame.pack(); frame.setVisible( true ); } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { createAndShowUI(); } }); } } 

Si necesita más ayuda, actualice su pregunta con un SSCCE adecuado que demuestre el problema. Todas las preguntas deben tener un SSCCE adecuado, no solo unas pocas líneas aleatorias de código para que podamos entender el contexto del código.