forked from menault/TD3_DEV51_Qualite_Algo
		
	
		
			
				
	
	
		
			84 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| import javax.swing.*;
 | |
| import java.awt.*;
 | |
| import java.awt.event.ActionEvent;
 | |
| import java.awt.event.ActionListener;
 | |
| 
 | |
| /**
 | |
|  * Composant chronomètre (mm:ss) pour le jeu du pendu.
 | |
|  * - Démarre/stoppe/réinitialise le temps
 | |
|  * - S'affiche comme une barre en haut de la fenêtre
 | |
|  *
 | |
|  * @version 1.0
 | |
|  * @author Adrien
 | |
|  * Date : 08-10-2025
 | |
|  * Licence :
 | |
|  */
 | |
| public class Chronometre extends JPanel implements ActionListener {
 | |
| 
 | |
|     private final JLabel timeLabel = new JLabel("00:00", SwingConstants.CENTER);
 | |
|     private final Timer timer; // tick chaque seconde
 | |
|     private boolean running = false;
 | |
|     private long startMillis = 0L;
 | |
|     private long accumulatedMillis = 0L;
 | |
| 
 | |
|     public Chronometre() {
 | |
|         setLayout(new BorderLayout());
 | |
|         setBorder(BorderFactory.createEmptyBorder(8, 8, 8, 8));
 | |
|         timeLabel.setFont(new Font("Segoe UI", Font.BOLD, 20));
 | |
|         add(timeLabel, BorderLayout.CENTER);
 | |
| 
 | |
|         // Timer Swing (1s)
 | |
|         timer = new Timer(1000, this);
 | |
|     }
 | |
| 
 | |
|     /** Démarre le chronomètre (ou reprend si en pause). */
 | |
|     public void start() {
 | |
|         if (!running) {
 | |
|             running = true;
 | |
|             startMillis = System.currentTimeMillis();
 | |
|             timer.start();
 | |
|             repaint();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /** Met en pause le chronomètre. */
 | |
|     public void stop() {
 | |
|         if (running) {
 | |
|             running = false;
 | |
|             accumulatedMillis += System.currentTimeMillis() - startMillis;
 | |
|             timer.stop();
 | |
|             repaint();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /** Remet le chronomètre à 00:00 (sans le relancer). */
 | |
|     public void reset() {
 | |
|         running = false;
 | |
|         startMillis = 0L;
 | |
|         accumulatedMillis = 0L;
 | |
|         timer.stop();
 | |
|         updateLabel(0L);
 | |
|     }
 | |
| 
 | |
|     /** Temps écoulé total (en millisecondes). */
 | |
|     public long getElapsedMillis() {
 | |
|         long now = System.currentTimeMillis();
 | |
|         long runningMillis = running ? (now - startMillis) : 0L;
 | |
|         return accumulatedMillis + runningMillis;
 | |
|     }
 | |
| 
 | |
|     /** Tick du timer : met à jour l'affichage. */
 | |
|     @Override
 | |
|     public void actionPerformed(ActionEvent actionEvent) {
 | |
|         updateLabel(getElapsedMillis());
 | |
|     }
 | |
| 
 | |
|     // --- interne ---
 | |
|     private void updateLabel(long elapsedMillis) {
 | |
|         long totalSeconds = elapsedMillis / 1000;
 | |
|         long minutes = totalSeconds / 60;
 | |
|         long seconds = totalSeconds % 60;
 | |
|         timeLabel.setText(String.format("%02d:%02d", minutes, seconds));
 | |
|     }
 | |
| }
 |