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(Game game, String title, int width, int height, int x, int y) { super(game, title, width, height, x, y); this.cars = game.getCars(); 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() { // cloner pour de modifier la classe principale ArrayList cars_clone = new ArrayList<>(cars); cars_clone.sort(Comparator.comparingInt(Car::getScore).reversed()); StringBuilder s = new StringBuilder(); s.append(""); for (Car c : cars) { s.append(""); } s.append("
" + c.getName() + ": " + c.getScore() + "%
"); System.out.println(s); label.setText(s.toString()); } @Override /** * Méthode appelée par GameView.update(). * Elle met à jour le classement affiché. */ public boolean apply() { updateRankText(); return true; } }