Files
SAE32_2025/src/fr/iutfbleau/sae/ConverterWindow.java
T
2026-01-07 20:30:37 +01:00

136 lines
4.4 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package fr.iutfbleau.sae;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.Map;
import javax.swing.*;
/**
* Fenêtre principale du convertisseur.
* Cette classe affiche l'image chargée, les tables de fréquences,
* les codes Huffman et les codes canoniques.
* C'est la partie "Vue" de l'application.
*/
public class ConverterWindow extends JFrame {
private ImagePreviewPanel imagePreviewPanel;
private FrequencyTablePanel frequencyTablePanel;
private CodeTablePanel codeTablePanel;
private JPanel bottomPanel;
/**
* Constructeur de la fenêtre du convertisseur.
* Initialise la fenêtre et installe tous les panneaux graphiques.
*/
public ConverterWindow() {
setTitle("Convertisseur PIF - Visualisation des données");
setSize(900, 600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setResizable(true);
setLayout(new BorderLayout());
// Création des panneaux d'affichage
imagePreviewPanel = new ImagePreviewPanel();
frequencyTablePanel = new FrequencyTablePanel();
codeTablePanel = new CodeTablePanel();
// Panneau principal avec un scroll
JPanel contentPanel = new JPanel(new BorderLayout());
contentPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
JLabel header = new JLabel(" Convertisseur PIF Visualisation des données ");
header.setFont(new Font("SansSerif", Font.BOLD, 18));
header.setHorizontalAlignment(SwingConstants.CENTER);
contentPanel.add(header, BorderLayout.NORTH);
contentPanel.add(imagePreviewPanel, BorderLayout.CENTER);
// Les tables en bas
JPanel tablesPanel = new JPanel();
tablesPanel.setLayout(new BoxLayout(tablesPanel, BoxLayout.Y_AXIS));
tablesPanel.add(frequencyTablePanel);
tablesPanel.add(Box.createRigidArea(new Dimension(0, 5)));
tablesPanel.add(codeTablePanel);
contentPanel.add(tablesPanel, BorderLayout.SOUTH);
JScrollPane scrollPane = new JScrollPane(contentPanel);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
scrollPane.getVerticalScrollBar().setUnitIncrement(16);
add(scrollPane, BorderLayout.CENTER);
// Fenêtre visible immédiatement
setVisible(true);
}
/**
* Affiche l'image chargée dans le panneau d'aperçu.
* @param img l'image à afficher
*/
public void setImagePreview(BufferedImage img) {
imagePreviewPanel.setImage(img);
}
/**
* Met à jour l'affichage des fréquences des trois composantes.
*/
public void setFrequencyTable(int[] freqR, int[] freqG, int[] freqB) {
frequencyTablePanel.updateFrequencies(freqR, freqG, freqB);
}
/**
* Met à jour l'affichage des codes Huffman.
*/
public void setHuffmanTable(Map<Integer, String> r,
Map<Integer, String> g,
Map<Integer, String> b) {
codeTablePanel.updateCodes(r, g, b);
}
/**
* Met à jour l'affichage des codes canoniques.
*/
public void setCanonicalTable(Map<Integer, String> r,
Map<Integer, String> g,
Map<Integer, String> b) {
codeTablePanel.updateCanonicalCodes(r, g, b);
}
/**
* Ajoute un bouton permettant d'exporter l'image en .pif.
* Le contrôleur est envoyé au listener responsable de la sauvegarde.
*/
public void addSaveButton(ConverterController controller) {
JButton saveBtn = new JButton("Exporter en .pif");
ExportButtonListener listener = new ExportButtonListener(controller);
saveBtn.addActionListener(listener);
this.bottomPanel = new JPanel();
bottomPanel.setLayout(new FlowLayout(FlowLayout.CENTER));
bottomPanel.add(saveBtn);
add(bottomPanel, BorderLayout.SOUTH);
revalidate();
repaint();
}
/**
* Retire le bouton d'export apres la sauvegarde.
* Utilise dans le cas ou un chemin de sortie est fourni en argument.
*/
public void removeSaveButton() {
if (bottomPanel != null) {
remove(bottomPanel);
bottomPanel = null;
revalidate();
repaint();
}
}
}