package visual; import java.awt.BorderLayout; import java.util.ArrayList; import java.util.Comparator; import java.util.List; import javax.swing.JLabel; import model.Game; import model.car.Car; /** * 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 RankboardView extends GameView { /** Liste des voitures à afficher */ List cars; /** Composant JLabel pour afficher le classement */ private JLabel label; @Override protected void init(Game game) { super.init(game); this.cars = game.getCars(); this.label = new JLabel(); this.add(label, BorderLayout.CENTER); } /** * 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 RankboardView(Game game, String title, int width, int height, int x, int y) { super(game, title, width, height, x, y); if (game != null) init(game); } /** * 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() { if (cars == null) return; // cloner pour de modifier la classe principale List cars_clone = new ArrayList<>(cars); cars_clone.sort(Comparator.comparingInt(Car::getScore).reversed()); StringBuilder s = new StringBuilder(); s.append(""); for (Car c : cars_clone) { s.append(""); } s.append("
" + c.getName() + ": " + c.getScore() + "%
"); label.setText(s.toString()); } @Override /** * Méthode appelée par GameView.update(). * Elle met à jour le classement affiché. */ public boolean apply() { if (!super.apply()) { System.out.println("ERREUR Rankboard: game est null"); return false; } updateRankText(); return true; } @Override public void end() { } }