package fr.iutfbleau.sae.vconverter; import java.awt.image.BufferedImage; import java.util.Map; import java.awt.*; import javax.swing.*; import fr.iutfbleau.sae.ConverterController; import fr.iutfbleau.sae.ExportButtonListener; /** * Fenêtre principale du convertisseur. * *
* Cette classe correspond à la vue principale de l’application. * Elle centralise l’affichage des informations liées à la conversion * d’une image (aperçu, fréquences, codes). *
* * ** Elle sert de point d’entrée unique pour la partie graphique *
*/ public class ConverterWindow extends JFrame { private ImagePreviewPanel imagePreviewPanel; private FrequencyTablePanel frequencyTablePanel; private CodeTablePanel codeTablePanel; /** * Crée la fenêtre principale du convertisseur. * ** Le constructeur initialise la fenêtre et met en place * les différents panneaux graphiques utilisés pour l’affichage. *
*/ public ConverterWindow() { // Configuration de la fenetre this.setTitle("Convertisseur PIF - Visualisation des données"); this.setSize(900, 600); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLocationRelativeTo(null); // Centre la fenêtre this.setResizable(true); // on autorise le this.setLayout(new BorderLayout()); // Initialisation des panels this.imagePreviewPanel = new ImagePreviewPanel(); this.frequencyTablePanel = new FrequencyTablePanel(); this.codeTablePanel = new CodeTablePanel(); // Je gere le panel principal JPanel contentPanel = new JPanel(); contentPanel.setLayout(new BoxLayout(contentPanel, BoxLayout.Y_AXIS)); //contentPanel.setBackground(new Color(255, 0, 0)); // rouge vif pour demo contentPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); // Titre JLabel header = new JLabel(" Convertisseur PIF – Visualisation des données "); header.setFont(new Font("SansSerif", Font.BOLD, 18)); header.setAlignmentX(Component.CENTER_ALIGNMENT); contentPanel.add(header); contentPanel.add(Box.createRigidArea(new Dimension(0, 5))); // espace // Ajout du panel d'aperçu contentPanel.add(imagePreviewPanel); contentPanel.add(Box.createRigidArea(new Dimension(0, 5))); // Ajout du panel des fréquences contentPanel.add(frequencyTablePanel); contentPanel.add(Box.createRigidArea(new Dimension(0, 5))); // Ajout panel des codes contentPanel.add(codeTablePanel); contentPanel.add(Box.createRigidArea(new Dimension(0, 5))); // la section du scrollpane JScrollPane scrollPane = new JScrollPane(contentPanel); scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); scrollPane.getVerticalScrollBar().setUnitIncrement(16); // scroll plus adouci fluide this.add(scrollPane, BorderLayout.CENTER); this.setVisible(true); } /** * Met à jour l’image affichée dans la zone d’aperçu. * ** Cette méthode est appelée lorsque l’image à convertir * a été chargée. La fenêtre ne modifie pas l’image : * elle la transmet simplement au panneau d’aperçu. *
* * @param img image à afficher */ public void setImagePreview(BufferedImage img) { imagePreviewPanel.setImage(img); } /** * Met à jour l’affichage des tables de fréquences. */ public void setFrequencyTable(int[] freqR,int[] freqG,int[] freqB) { frequencyTablePanel.updateFrequencies(freqR,freqG,freqB); } /** * Met à jour l’affichage des codes Huffman. * ** Elle permet uniquement d’afficher les codes * qui ont été produits par la partie traitement. *
*/ public void setHuffmanTable(Map* Les codes canoniques sont transmis au panneau * chargé de leur affichage. *
*/ public void setCanonicalTable(Map