Files
SAE32_2025/src/fr/iutfbleau/sae/vconverter/ConverterWindow.java
T

138 lines
4.5 KiB
Java
Raw Normal View History

2025-12-19 10:49:27 +01:00
package fr.iutfbleau.sae.vconverter;
2025-12-27 10:20:24 +01:00
import fr.iutfbleau.sae.util.Config;
2025-12-20 00:30:14 +01:00
import java.awt.*;
import java.util.Map;
2025-12-27 10:20:24 +01:00
import javax.swing.*;
import java.awt.image.BufferedImage;
2025-12-20 00:30:14 +01:00
2025-12-19 10:49:27 +01:00
/**
* Fenêtre principale du convertisseur.
*
* <p>
2025-12-20 00:30:14 +01:00
* Cette classe correspond à la vue principale de lapplication.
* Elle centralise laffichage des informations liées à la conversion
* dune image (aperçu, fréquences, codes).
2025-12-19 10:49:27 +01:00
* </p>
*
*
2025-12-20 00:30:14 +01:00
* <p>
* Elle sert de point dentrée unique pour la partie graphique
* </p>
2025-12-19 10:49:27 +01:00
*/
2025-12-20 00:30:14 +01:00
public class ConverterWindow extends JFrame {
2025-12-19 10:49:27 +01:00
private ImagePreviewPanel imagePreviewPanel;
private FrequencyTablePanel frequencyTablePanel;
private CodeTablePanel codeTablePanel;
2025-12-20 00:30:14 +01:00
2025-12-19 10:49:27 +01:00
/**
2025-12-20 00:30:14 +01:00
* Crée la fenêtre principale du convertisseur.
2025-12-19 10:49:27 +01:00
*
* <p>
2025-12-20 00:30:14 +01:00
* Le constructeur initialise la fenêtre et met en place
* les différents panneaux graphiques utilisés pour laffichage.
* </p>
*/
public ConverterWindow() {
// Configuration de la fenetre
2025-12-28 00:50:00 +01:00
this.setTitle("Convertisseur PIF - Visualisation des données");
this.setSize(900, 600);
2025-12-20 00:30:14 +01:00
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null); // Centre la fenêtre
2025-12-28 00:50:00 +01:00
this.setResizable(true); // on autorise le resize
2025-12-20 00:30:14 +01:00
// 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));
2025-12-28 00:50:00 +01:00
//contentPanel.setBackground(new Color(255, 0, 0)); // rouge vif pour demo
contentPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
2025-12-20 00:30:14 +01:00
// 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);
2025-12-28 00:50:00 +01:00
contentPanel.add(Box.createRigidArea(new Dimension(0, 5))); // espace
2025-12-20 00:30:14 +01:00
2025-12-28 00:50:00 +01:00
// Ajout du panel d'aperçu
2025-12-20 00:30:14 +01:00
contentPanel.add(imagePreviewPanel);
2025-12-28 00:50:00 +01:00
contentPanel.add(Box.createRigidArea(new Dimension(0, 5)));
2025-12-20 00:30:14 +01:00
// Ajout du panel des fréquences
contentPanel.add(frequencyTablePanel);
2025-12-28 00:50:00 +01:00
contentPanel.add(Box.createRigidArea(new Dimension(0, 5)));
2025-12-20 00:30:14 +01:00
// Ajout panel des codes
contentPanel.add(codeTablePanel);
2025-12-28 00:50:00 +01:00
contentPanel.add(Box.createRigidArea(new Dimension(0, 5)));
2025-12-20 00:30:14 +01:00
// 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);
this.setVisible(true); // toi meme tu sais
}
/**
* Met à jour limage affichée dans la zone daperçu.
*
* <p>
* Cette méthode est appelée lorsque limage à convertir
* a été chargée. La fenêtre ne modifie pas limage :
* elle la transmet simplement au panneau daperçu.
2025-12-19 10:49:27 +01:00
* </p>
*
2025-12-20 00:30:14 +01:00
* @param img image à afficher
2025-12-19 10:49:27 +01:00
*/
2025-12-27 10:20:24 +01:00
public void setImagePreview(BufferedImage img) {
2025-12-19 10:49:27 +01:00
imagePreviewPanel.setImage(img);
}
/**
2025-12-20 00:30:14 +01:00
* Met à jour laffichage des tables de fréquences.
2025-12-19 10:49:27 +01:00
*/
2025-12-20 14:56:22 +01:00
public void setFrequencyTable(int[] freqR,int[] freqG,int[] freqB) {
frequencyTablePanel.updateFrequencies(freqR,freqG,freqB);
2025-12-19 10:49:27 +01:00
}
/**
* Met à jour laffichage des codes Huffman.
*
* <p>
2025-12-20 00:30:14 +01:00
* Elle permet uniquement dafficher les codes
* qui ont été produits par la partie traitement.
2025-12-19 10:49:27 +01:00
* </p>
*/
2025-12-20 00:30:14 +01:00
public void setHuffmanTable(Map<Integer, String> codesRouge,
Map<Integer, String> codesVert,
Map<Integer, String> codesBleu) {
codeTablePanel.updateCodes(codesRouge, codesVert, codesBleu);
2025-12-19 10:49:27 +01:00
}
/**
* Met à jour laffichage des codes canoniques.
*
* <p>
2025-12-20 00:30:14 +01:00
* Les codes canoniques sont transmis au panneau
2025-12-28 00:01:31 +01:00
* chargé de leur affichage.
2025-12-19 10:49:27 +01:00
* </p>
*/
2025-12-20 00:30:14 +01:00
public void setCanonicalTable(Map<Integer, String> codesRouge,
Map<Integer, String> codesVert,
Map<Integer, String> codesBleu) {
codeTablePanel.updateCanonicalCodes(codesRouge, codesVert, codesBleu);
2025-12-19 10:49:27 +01:00
}
}