Dentro de mi aplicación, estoy creando un timerLabel y timerPanel de la siguiente manera:

// Add timer panel
JPanel timerPanel = new JPanel();
timerPanel.setBorder(new EmptyBorder(0, 0, 0, 0));
timerPanel.setBackground(new Color(0x757575));
c.gridx = 0;
c.fill = GridBagConstraints.HORIZONTAL;
c.insets = new Insets(0,0,0,20);
c.gridy = 0;
centerPanel.add(timerPanel, c);

// Add timer label
JLabel timerLabel = new JLabel("00:00", SwingConstants.RIGHT);
timerLabel.setForeground(Color.black);
timerLabel.setFont(new Font("Serif", Font.BOLD, 30));
timerLabel.setHorizontalAlignment(JLabel.RIGHT);
c.gridx = 1;
c.fill = GridBagConstraints.HORIZONTAL;
c.gridy = 0;
timerLabel.setForeground(Color.white);
timerPanel.add(timerLabel, c);

Me gustaría que el temporizador comenzara a contar desde 60 segundos cada vez que el usuario hace clic en Inicio y reinicia el botón. A continuación se muestra el ActionListener que he implementado. En este momento no estoy seguro de cómo hacer esto:

  private class ButtonHandler implements ActionListener {
    @Override
    public void actionPerformed(java.awt.event.ActionEvent e) {

      // The text from the button that the user clicked.
      String cmd = e.getActionCommand();

      // Respond to Quit button by ending the program.
      if (cmd.equals(GuiText.START.toString())) {
        startGame();
        // start the timer here
      } else if (cmd.equals(GuiText.PREVIOUS.toString())) {
        QuestionList.selectRandomQuestion();
        questionLabel.setText(message);
        // reset the timer here
      } else if (cmd.equals(GuiText.NEXT.toString())) {
        QuestionList.selectRandomQuestion();
        questionLabel.setText(message);
        // reset the timer here
      } else {
        textArea.setText(cmd);
      }
      // Causes the display to be redrawn, to show any changes made.
      display.repaint();
    }
  }

Por último, necesito una forma de rastrear cuando el temporizador llega a cero y "hacer algo" cuando pueda llamar a un método. ¿Cómo puedo lograr esto? Mi código completo está disponible aquí (para contexto): https://pastebin.com/44XWxTQt. Agradezco su tiempo y ayuda.

0
methuselah 27 oct. 2019 a las 20:55

1 respuesta

La mejor respuesta

Todo lo que implique la actualización de componentes de Swing debería girar en torno a javax.swing.Timer. Esto tiene métodos start() / stop() para invocar los clics de sus botones. También se puede configurar a través del constructor para llamar a su propio método actionPerformed cada segundo (para que pueda actualizar JLabel y repintar).

https://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html

1
drekbour 27 oct. 2019 a las 18:42