From 6cd0e6f8e11f38ef7ebb4757ac74dddae6cfb5aa Mon Sep 17 00:00:00 2001 From: orfao Date: Wed, 17 Apr 2024 21:42:55 +0200 Subject: [PATCH] Ajout de commentaires pour la documentation du code --- src/.DS_Store | Bin 10244 -> 8196 bytes src/Button.java | 2 +- src/GridMakeUserInterfaceView.java | 1 - src/GridMakerCase.java | 56 ++++++++++++++++++++---- src/GridMakerChecker.java | 1 - src/GridMakerResetGrid.java | 2 +- src/GridMakerRules.java | 19 ++++++++- src/HomeView.java | 53 +++++++++++++++++------ src/RulesDialogManager.java | 17 ++++++-- src/RulesSudoku.java | 20 +++++++-- src/Title.java | 21 +++++++-- src/Window.java | 66 +++++++++++++++++++---------- 12 files changed, 198 insertions(+), 60 deletions(-) diff --git a/src/.DS_Store b/src/.DS_Store index ede9ca4c5ab81860e9d952ea52a39eff59e1579f..c1be4fdc053e95c1ef8f287a97751a0bbf7d7ad7 100644 GIT binary patch delta 117 zcmZn(XmOBWU|?W$DortDU;r^WfEYvza8E20o2aMAD7GXg_Mh1*Ofg1V#g8|T51_lvKg$%(!3sZm^vw@a12+K_F z64}ow12=|G#9k9*eI1f1f-qT_BN@Vg&Pin`pR6D%$@p`#mFQWfjSWU@g3Mq`85FpI wv@6Kl8w05l$R9RL6T diff --git a/src/Button.java b/src/Button.java index 3930148..d17c996 100644 --- a/src/Button.java +++ b/src/Button.java @@ -2,7 +2,7 @@ import javax.swing.*; import java.awt.*; /** - * Class containing custom settings for JButtons used in the application. + * Class containing custom settings for JButtons. * @version 1.0 * @author Moncef STITI * @author Marco ORFAO diff --git a/src/GridMakeUserInterfaceView.java b/src/GridMakeUserInterfaceView.java index 28251ad..1b139df 100755 --- a/src/GridMakeUserInterfaceView.java +++ b/src/GridMakeUserInterfaceView.java @@ -4,7 +4,6 @@ import javax.swing.JMenu; import java.awt.Container; import java.awt.BorderLayout; import java.awt.event.ActionListener; -import java.awt.Color; public class GridMakeUserInterfaceView { diff --git a/src/GridMakerCase.java b/src/GridMakerCase.java index b6b06d9..6260b91 100755 --- a/src/GridMakerCase.java +++ b/src/GridMakerCase.java @@ -2,12 +2,23 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; +/** + * GridMakerCase représente une case dans une grille éditable. + * Cette classe étend JPanel et implémente KeyListener pour permettre à l'utilisateur de saisir des valeurs dans la case. + * @version 1.0 + * @author Moncef STITI + * @author Marco ORFAO + */ public class GridMakerCase extends JPanel implements KeyListener { - private int cellValue = 0; - private String displayText = ""; // Case initialement vide - private JButton actionButton = new JButton(displayText); + private int cellValue = 0; // Valeur actuelle de la case + private String displayText = ""; // Texte à afficher dans la case + private JButton actionButton = new JButton(displayText); // Bouton pour afficher le texte + /** + * Constructeur par défaut de GridMakerCase. + * Initialise le bouton avec les propriétés nécessaires, ajoute un KeyListener et configure le layout. + */ public GridMakerCase() { actionButton.setOpaque(false); actionButton.setContentAreaFilled(false); @@ -22,40 +33,67 @@ public class GridMakerCase extends JPanel implements KeyListener { setPreferredSize(new Dimension(60, 60)); } + /** + * Méthode appelée lorsqu'une touche est enfoncée. + * Si la touche est un chiffre, met à jour la valeur de la case avec ce chiffre. + * @param e L'événement KeyEvent généré lorsque la touche est enfoncée. + */ @Override public void keyPressed(KeyEvent e) { - int keyChar = e.getKeyChar(); - if (Character.isDigit(keyChar)) { - int num = Character.getNumericValue(keyChar); - if (num >= 0 && num <= 9) { - setCellValue(num); - } + int keyChar = e.getKeyChar(); + if (Character.isDigit(keyChar)) { + int num = Character.getNumericValue(keyChar); + if (num >= 0 && num <= 9) { + setCellValue(num); } + } } + /** + * Méthode appelée lorsqu'une touche est relâchée. + * Aucun traitement n'est nécessaire dans ce cas. + * @param e L'événement KeyEvent généré lorsque la touche est relâchée. + */ @Override public void keyReleased(KeyEvent e) { // Pas de traitement nécessaire } + /** + * Méthode appelée lorsqu'une touche est tapée (enfoncée puis relâchée). + * Aucun traitement n'est nécessaire dans ce cas. + * @param e L'événement KeyEvent généré lorsque la touche est tapée. + */ @Override public void keyTyped(KeyEvent e) { // Pas de traitement nécessaire } + /** + * Met à jour l'affichage de la case avec la valeur actuelle. + */ public void updateDisplay() { actionButton.setText(displayText.isEmpty() ? "" : displayText); revalidate(); repaint(); } + /** + * Définit la valeur de la case et met à jour son affichage. + * @param value La nouvelle valeur de la case. + */ public void setCellValue(int value) { this.cellValue = value; this.displayText = (value == 0) ? "" : String.valueOf(value); // Mettre à jour avec une chaîne vide si la valeur est 0 updateDisplay(); } + /** + * Récupère la valeur actuelle de la case. + * @return La valeur actuelle de la case. + */ public int getCellValue() { return this.cellValue; } } + diff --git a/src/GridMakerChecker.java b/src/GridMakerChecker.java index ab454dd..8097a42 100755 --- a/src/GridMakerChecker.java +++ b/src/GridMakerChecker.java @@ -1,5 +1,4 @@ import javax.swing.*; -import java.awt.*; import java.awt.event.*; /** diff --git a/src/GridMakerResetGrid.java b/src/GridMakerResetGrid.java index 2f8af60..6d4c3b7 100755 --- a/src/GridMakerResetGrid.java +++ b/src/GridMakerResetGrid.java @@ -2,7 +2,7 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; /** - * La classe GridMakerResetGrid ... à compléter + * La classe GridMakerResetGrid sert à crée une nouvelle grille de 0. * * @version 1.0 * @author Moncef STITI diff --git a/src/GridMakerRules.java b/src/GridMakerRules.java index 357a85d..c206cdc 100755 --- a/src/GridMakerRules.java +++ b/src/GridMakerRules.java @@ -1,14 +1,31 @@ import java.awt.event.*; +/** + * GridMakerRules gère les actions liées aux règles du jeu. + * Cette classe implémente ActionListener pour réagir aux clics sur un bouton. + * @version 1.0 + * @author Moncef STITI + * @author Marco ORFAO + */ public class GridMakerRules implements ActionListener { - private RulesDialogManager rulesDialog; + private RulesDialogManager rulesDialog; // Gestionnaire de la boîte de dialogue des règles + /** + * Constructeur de GridMakerRules. + * Initialise le gestionnaire de boîte de dialogue des règles. + */ public GridMakerRules(){ this.rulesDialog = new RulesDialogManager(); } + /** + * Méthode appelée lorsqu'une action est effectuée, comme un clic sur un bouton. + * Affiche la boîte de dialogue des règles. + * @param e L'événement d'action qui a déclenché cette méthode. + */ @Override public void actionPerformed(ActionEvent e) { rulesDialog.showDialog(); // On appelle la méthode qui affiche la fenêtre de dialogue } } + diff --git a/src/HomeView.java b/src/HomeView.java index c343a64..64821c8 100644 --- a/src/HomeView.java +++ b/src/HomeView.java @@ -1,8 +1,18 @@ import javax.swing.*; import java.awt.*; +/** + * HomeView représente la vue de la page d'accueil de l'application Sudoku. + * Cette classe étend JPanel et affiche les éléments de la page d'accueil, y compris le titre, les boutons et les contrôles audio. + * Elle utilise également les classes Title, Button, et MusicButton. + * + * @version 1.0 + * @author Moncef STITI + * @author Marco ORFAO + */ public class HomeView extends JPanel { + // Constantes pour les chemins des icônes et des fichiers audio, ainsi que pour les dimensions et les couleurs private final String AUDIO_ON = "img/iconeAudio.png"; private final String AUDIO_OFF = "img/iconeAudioMuted.png"; private final String MUSIC_FILE = "audio/musiqueDeFond.wav"; @@ -13,28 +23,40 @@ public class HomeView extends JPanel { private final Font SUBTITLE_FONT = new Font("Copperplate", Font.PLAIN, 24); private final Font BUTTON_FONT = new Font("Copperplate", Font.BOLD, 24); private final String[] BUTTON_TEXTS = {"Jouer", "Générer une grille", "Règles", "Quitter"}; + + // Tableau de titres pour le titre principal et le sous-titre private final Title[] labels = { new Title("Sudoku Solver", TITLE_FONT, TITLE_TEXT_COLOR), new Title("Par Moncef & Marco", SUBTITLE_FONT, TITLE_TEXT_COLOR) }; - private MusicButton musicButton; - private final Window window; - private JPanel titlePanel; - private JPanel buttonPanel; - private JLabel imageLabel; + private MusicButton musicButton; // Bouton pour contrôler la musique + private final Window window; // Fenêtre parente + private JPanel titlePanel; // Panneau pour le titre + private JPanel buttonPanel; // Panneau pour les boutons + private JLabel imageLabel; // Étiquette pour l'image + + /** + * Constructeur de la classe HomeView. + * Initialise la fenêtre parente et crée les composants de la page d'accueil. + * @param window La fenêtre parente. + */ public HomeView(Window window) { this.window = window; createComponents(); addComponentsToWindow(); } + /** + * Crée les composants de la page d'accueil, y compris les panneaux de titre et de boutons. + */ private void createComponents() { titlePanel = new JPanel(); buttonPanel = new JPanel(); ImageIcon iconeSudoku = new ImageIcon("img/sudoku.png"); imageLabel = new JLabel(iconeSudoku); + // Configuration du panneau de titre GridLayout titleLayout = new GridLayout(2, 1); titlePanel.setLayout(titleLayout); titlePanel.setBackground(BACKGROUND_COLOR); @@ -43,7 +65,7 @@ public class HomeView extends JPanel { titlePanel.add(label); } - // Button Panel + // Configuration du panneau de boutons GridLayout buttonLayout = new GridLayout(BUTTON_TEXTS.length, 1, 0, 10); buttonPanel.setLayout(buttonLayout); buttonPanel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20)); @@ -55,25 +77,28 @@ public class HomeView extends JPanel { buttonPanel.add(button); } - musicButton = new MusicButton(AUDIO_ON, AUDIO_OFF, MUSIC_FILE); + musicButton = new MusicButton(AUDIO_ON, AUDIO_OFF, MUSIC_FILE); // Bouton pour contrôler la musique } + /** + * Ajoute les composants créés à la fenêtre parente. + */ public void addComponentsToWindow() { BorderLayout layout = new BorderLayout(); window.getContentPane().setLayout(layout); window.add(titlePanel, BorderLayout.NORTH); window.add(buttonPanel, BorderLayout.WEST); window.add(imageLabel, BorderLayout.EAST); - window.setPageTitle("Menu principal"); + window.setPageTitle("Menu principal"); // Définit le titre de la page dans la fenêtre FlowLayout controlPanelLayout = new FlowLayout(FlowLayout.RIGHT); - JPanel controlPanel = new JPanel(controlPanelLayout); + JPanel controlPanel = new JPanel(controlPanelLayout); // Panneau pour les contrôles audio controlPanel.setBackground(BACKGROUND_COLOR); - controlPanel.add(musicButton); - window.add(controlPanel, BorderLayout.SOUTH); + controlPanel.add(musicButton); // Ajoute le bouton de contrôle audio + window.add(controlPanel, BorderLayout.SOUTH); // Ajoute le panneau de contrôles à la fenêtre - window.pack(); - window.setLocationRelativeTo(null); - window.setVisible(true); + window.pack(); // Ajuste la taille de la fenêtre pour s'adapter à son contenu + window.setLocationRelativeTo(null); // Centre la fenêtre sur l'écran + window.setVisible(true); // Rend la fenêtre visible } } diff --git a/src/RulesDialogManager.java b/src/RulesDialogManager.java index f1c360f..c903d04 100644 --- a/src/RulesDialogManager.java +++ b/src/RulesDialogManager.java @@ -1,9 +1,20 @@ import javax.swing.JOptionPane; +/** + * RulesDialogManager gère l'affichage de la boîte de dialogue des règles. + * Cette classe implémente DialogManager pour définir la méthode showDialog. + * @version 1.0 + * @author Moncef STITI + * @author Marco ORFAO + */ public class RulesDialogManager implements DialogManager { + /** + * Affiche la boîte de dialogue des règles du Sudoku. + */ @Override public void showDialog() { - RulesSudoku rulesPanel = new RulesSudoku(); - JOptionPane.showMessageDialog(null, rulesPanel, "Règles du Sudoku", JOptionPane.PLAIN_MESSAGE); + RulesSudoku rulesPanel = new RulesSudoku(); // Création du panneau contenant les règles + JOptionPane.showMessageDialog(null, rulesPanel, "Règles du Sudoku", JOptionPane.PLAIN_MESSAGE); // Affichage de la boîte de dialogue } -} \ No newline at end of file +} + diff --git a/src/RulesSudoku.java b/src/RulesSudoku.java index b56c480..606dc34 100644 --- a/src/RulesSudoku.java +++ b/src/RulesSudoku.java @@ -1,14 +1,25 @@ import javax.swing.*; import java.awt.*; +/** + * RulesSudoku représente le panneau affichant les règles du Sudoku. + * Cette classe étend JPanel et définit le contenu des règles. + * @version 1.0 + * @author Moncef STITI + * @author Marco ORFAO + */ public class RulesSudoku extends JPanel { - private Dimension FRAME_SIZE = new Dimension(400, 500); - private Color BACKGROUND_COLOR = new Color(54, 91, 109); - + private Dimension FRAME_SIZE = new Dimension(400, 500); // Taille de la fenêtre des règles + private Color BACKGROUND_COLOR = new Color(54, 91, 109); // Couleur d'arrière-plan du panneau + + /** + * Constructeur par défaut de RulesSudoku. + * Initialise le contenu des règles et configure l'apparence du panneau. + */ public RulesSudoku() { BorderLayout gestionnaireBorderLayout = new BorderLayout(); this.setLayout(gestionnaireBorderLayout); - this.setBackground(this.BACKGROUND_COLOR); // Couleur d'arrière-plan du menu principal + this.setBackground(this.BACKGROUND_COLOR); // Couleur d'arrière-plan du panneau JLabel titleLabel = new JLabel("Règles du Sudoku"); titleLabel.setFont(new Font("Copperplate", Font.BOLD, 40)); // Police du titre @@ -35,3 +46,4 @@ public class RulesSudoku extends JPanel { this.setPreferredSize(this.FRAME_SIZE); // Taille de la fenêtre des règles } } + diff --git a/src/Title.java b/src/Title.java index 70ad373..c953378 100644 --- a/src/Title.java +++ b/src/Title.java @@ -1,11 +1,26 @@ import javax.swing.*; import java.awt.*; +/** + * Title est une étiquette Swing personnalisée utilisée pour afficher un titre centré avec une police et une couleur spécifiées. + * Cette classe étend JLabel. + * @version 1.0 + * @author Moncef STITI + * @author Marco ORFAO + */ public class Title extends JLabel { + /** + * Constructeur de Title. + * Crée une étiquette avec le texte, la police et la couleur spécifiés, et la centre horizontalement. + * @param text Le texte à afficher. + * @param font La police à utiliser pour le texte. + * @param color La couleur du texte. + */ public Title(String text, Font font, Color color) { - super(text, SwingConstants.CENTER); - setFont(font); - setForeground(color); + super(text, SwingConstants.CENTER); // Centre le texte horizontalement + setFont(font); // Définit la police du texte + setForeground(color); // Définit la couleur du texte } } + diff --git a/src/Window.java b/src/Window.java index a3afb2c..2f543cc 100644 --- a/src/Window.java +++ b/src/Window.java @@ -1,60 +1,82 @@ import javax.swing.*; import java.awt.*; +/** + * Window est une classe représentant la fenêtre principale de l'application Sudoku. + * Cette classe étend JFrame et gère l'affichage des différentes pages de l'application. + * @version 1.0 + * @author Moncef STITI + * @author Marco ORFAO + */ public class Window extends JFrame { /** - * The minimum size of the window. - */ + * La taille minimale de la fenêtre. + */ private static final Dimension MIN_WINDOW_SIZE = new Dimension(850, 700); /** - * The title of the program. - */ + * Le titre du programme. + */ private static final String PROGRAM_TITLE = "Sudoku"; + /** + * La couleur d'arrière plan par défaut de la fenêtre + */ + private static final Color BACKGROUND_COLOR = new Color(54, 91, 109); /** - * The title of the current page. - */ + * Le titre de la page actuelle. + */ private String PAGE_TITLE = ""; /** - * Constructor - */ + * Constructeur de la classe Window. + * Initialise la fenêtre avec le titre du programme, la taille minimale et la couleur de fond. + */ public Window() { super(PROGRAM_TITLE); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setMinimumSize(MIN_WINDOW_SIZE); this.setLocationRelativeTo(null); - getContentPane().setBackground(new Color(54, 91, 109)); + getContentPane().setBackground(BACKGROUND_COLOR); } /** - * Get the title of the current page. - * @return The title of the current page. - */ + * Obtient le titre de la page actuelle. + * @return Le titre de la page actuelle. + */ public String getPageTitle() { return this.PAGE_TITLE; } /** - * Set the title of the current page. - * @param title The title of the current page. - */ + * Définit le titre de la page actuelle. + * Met à jour le titre de la fenêtre pour inclure le titre de la page et le titre du programme. + * @param title Le titre de la page actuelle. + */ public void setPageTitle(String title) { this.PAGE_TITLE = title; this.setTitle(this.PAGE_TITLE + " - " + Window.PROGRAM_TITLE); } + /** + * Change le contenu de la fenêtre pour afficher un nouveau panneau. + * @param menuPanel Le nouveau panneau à afficher. + */ public void changeMenu(JPanel menuPanel) { - getContentPane().removeAll(); - getContentPane().add(menuPanel); - revalidate(); - repaint(); + getContentPane().removeAll(); // Supprime tous les composants actuels de la fenêtre + getContentPane().add(menuPanel); // Ajoute le nouveau panneau + revalidate(); // Revalide la disposition des composants + repaint(); // Redessine la fenêtre } + /** + * Supprime tous les composants de la fenêtre. + * Utilisé pour effacer le contenu de la fenêtre. + * @param window La fenêtre à nettoyer. + */ public static void removeAllComponents(Window window) { - window.getContentPane().removeAll(); - window.revalidate(); - window.repaint(); + window.getContentPane().removeAll(); // Supprime tous les composants de la fenêtre + window.revalidate(); // Revalide la disposition des composants + window.repaint(); // Redessine la fenêtre } }