import java.awt.BorderLayout; import java.util.ArrayList; import java.util.Comparator; import javax.swing.JLabel; /** * Rankboard est une vue graphique affichant le classement des voitures. *

* Elle hérite de GameView et met à jour dynamiquement le score de chaque voiture. * Les scores sont triés du plus grand au plus petit. *

*/ public class Rankboard extends GameView { /** Liste des voitures à afficher */ ArrayList cars; /** Composant JLabel pour afficher le classement */ private final JLabel label; /** * Construit un Rankboard. * * @param title Titre de la fenêtre * @param cars Liste des voitures à suivre * @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 Rankboard(String title, ArrayList cars, int width, int height, int x, int y) { super(title, width, height, x, y); this.cars = cars; this.label = new JLabel(); this.add(label, BorderLayout.CENTER); } /** * Met à jour le texte affiché dans le JLabel. *

* Trie les voitures par score décroissant et construit * un tableau HTML pour l'affichage. *

*/ private void updateRankText() { cars.sort(Comparator.comparingInt(Car::getScore).reversed()); StringBuilder s = new StringBuilder(); s.append(""); for (Car c : cars) { s.append(""); } s.append("
" + c + ": " + c.getScore() + "%
"); label.setText(s.toString()); } @Override /** * Méthode appelée par GameView.update(). * Elle met à jour le classement affiché. */ protected void run() { updateRankText(); } }