import java.awt.BorderLayout; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.function.Supplier; import javax.swing.JButton; import javax.swing.JLabel; /** * Dashboard représente une vue graphique pour une voiture spécifique. *

* Il affiche : *

* et fournit un bouton pour mettre en pause ou reprendre le jeu. *

*/ public class Dashboard extends GameView { /** Label affichant le carburant et les tours */ private final JLabel label; /** Bouton pause/reprise */ private final JButton button; /** Voiture associée à ce dashboard */ private final Car car; /** État de pause global partagé par tous les dashboards */ private static boolean isPaused = false; /** * Construit un dashboard pour une voiture donnée. * * @param car la voiture suivie par ce dashboard * @param title titre du dashboard * @param fn fonction appelée pour activer/désactiver la pause * @param width largeur de la fenêtre * @param height hauteur de la fenêtre * @param x position horizontale de la fenêtre * @param y position verticale de la fenêtre */ public Dashboard(Car car, String title, Supplier fn, int width, int height, int x, int y) { super("Dashboard: " + title, width, height, x, y); this.car = car; this.label = new JLabel(); this.button = new JButton(); frame.setBackground(car.getColor()); init(fn); this.add(label, BorderLayout.CENTER); this.add(button, BorderLayout.SOUTH); } /** * Met à jour le texte du bouton en fonction de l'état de pause. */ private void updateButtonText() { button.setText(isPaused ? "En Pause" : "En Cours"); } /** * Initialise le listener du bouton pour gérer la pause. * * @param fn fonction appelée lorsque l'on clique sur le bouton pour inverser l'état de pause */ private void init(Supplier fn) { updateButtonText(); // classe anonyme pour le bouton MouseAdapter ma = new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { isPaused = fn.get(); updateButtonText(); GameView.update(); } }; this.button.addMouseListener(ma); } /** * Met à jour l'affichage du dashboard pour refléter * le carburant et le nombre de tours de la voiture. * Cette méthode est appelée périodiquement par le moteur de jeu. */ @Override public void run() { label.setText( "
Carburant Restant: " + car.getFuel() + "
Nombre de Tour: " + car.getRound() + "
" ); updateButtonText(); } }