package view; import javax.swing.*; import java.awt.*; import java.util.*; import model.*; /** * Fenêtre principale du jeu de course. * Elle affiche : * - le circuit * - le classement des voitures * - et ouvre une fenêtre de tableau de bord pour chaque voiture. */ public class FenetreJeu extends JFrame { private final PanneauCircuit panneauCircuit; private final PanneauClassement panneauClassement; private final java.util.List tableaux = new ArrayList<>(); private Runnable actionPause; // Action pour pause/reprendre, donnée par le contrôleur public FenetreJeu(Game game) { setTitle("🏎️ Jeu de course - Vue principale"); setDefaultCloseOperation(EXIT_ON_CLOSE); setLayout(new BorderLayout()); // Partie centrale : le circuit panneauCircuit = new PanneauCircuit(game); add(panneauCircuit, BorderLayout.CENTER); // Partie droite : le classement panneauClassement = new PanneauClassement(game); add(panneauClassement, BorderLayout.EAST); // Fenêtres séparées : un tableau de bord par voiture for (Car voiture : game.getCars()) { tableaux.add(new FenetreTableau(voiture, this)); } setSize(1100, 650); setLocationRelativeTo(null); // centre la fenêtre à l’écran setVisible(true); } /** Met à jour tous les affichages à partir du modèle */ public void rafraichir(Game game) { panneauCircuit.mettreAJour(game); panneauClassement.mettreAJour(game); tableaux.forEach(FenetreTableau::rafraichir); } /** Permet au contrôleur de donner l’action Pause/Reprendre */ public void setActionPause(Runnable action) { this.actionPause = action; } public Runnable getActionPause() { return actionPause; } }