package fr.iutfbleau.sae.vconverter; import javax.swing.*; import java.awt.*; import java.util.Map; /** * Panneau d'affichage des codes Huffman et canoniques. * Affiche les codes pour chaque composante de couleur (rouge, vert, bleu). * @author Algassimou */ public class CodeTablePanel extends JPanel { // Zones de texte pour les codes Huffman private JTextArea textHuffRouge, textHuffVert, textHuffBleu; // Zones de texte pour les codes canoniques private JTextArea textCanonRouge, textCanonVert, textCanonBleu; /** * Constructeur qui initialise l'interface utilisateur. */ public CodeTablePanel() { setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15)); // Titre pour les codes Huffman JLabel titreHuff = new JLabel("Codes Huffman"); titreHuff.setFont(new Font("SansSerif", Font.BOLD, 16)); add(titreHuff); add(Box.createVerticalStrut(10)); // Création des zones de texte pour les codes Huffman textHuffRouge = creerZoneTexte("Rouge"); textHuffVert = creerZoneTexte("Vert"); textHuffBleu = creerZoneTexte("Bleu"); // Séparateur add(Box.createVerticalStrut(20)); // Titre pour les codes canoniques JLabel titreCanon = new JLabel("Codes Canoniques"); titreCanon.setFont(new Font("SansSerif", Font.BOLD, 16)); add(titreCanon); add(Box.createVerticalStrut(10)); // Création des zones de texte pour les codes canoniques textCanonRouge = creerZoneTexte("Rouge (Canonique)"); textCanonVert = creerZoneTexte("Vert (Canonique)"); textCanonBleu = creerZoneTexte("Bleu (Canonique)"); } /** * Crée une zone de texte avec une étiquette. * @param titre Le titre à afficher au-dessus de la zone de texte * @return La zone de texte configurée */ private JTextArea creerZoneTexte(String titre) { add(new JLabel(titre + ":")); JTextArea zone = new JTextArea(8, 30); zone.setEditable(false); zone.setFont(new Font("Monospaced", Font.PLAIN, 12)); JScrollPane scroll = new JScrollPane(zone); scroll.setPreferredSize(new Dimension(300, 120)); add(scroll); add(Box.createVerticalStrut(10)); return zone; } /** * Met à jour l'affichage des codes Huffman. * @param rouge Les codes pour la composante rouge * @param vert Les codes pour la composante verte * @param bleu Les codes pour la composante bleue */ public void updateCodes(Map rouge, Map vert, Map bleu) { mettreAJourZoneTexte(textHuffRouge, rouge); mettreAJourZoneTexte(textHuffVert, vert); mettreAJourZoneTexte(textHuffBleu, bleu); } /** * Met à jour l'affichage des codes canoniques. * @param rouge Les codes pour la composante rouge * @param vert Les codes pour la composante verte * @param bleu Les codes pour la composante bleue */ public void updateCanonicalCodes(Map rouge, Map vert, Map bleu) { mettreAJourZoneTexte(textCanonRouge, rouge); mettreAJourZoneTexte(textCanonVert, vert); mettreAJourZoneTexte(textCanonBleu, bleu); } /** * Met à jour le contenu d'une zone de texte avec les codes fournis. * @param zone La zone de texte à mettre à jour * @param codes Les codes à afficher */ private void mettreAJourZoneTexte(JTextArea zone, Map codes) { StringBuilder sb = new StringBuilder(); for (Map.Entry entry : codes.entrySet()) { sb.append(String.format("%3d : %s%n", entry.getKey(), entry.getValue())); } zone.setText(sb.toString()); } }