Ajout de commentaires pour la documentation du code

This commit is contained in:
Marco ORFAO 2024-04-17 21:42:55 +02:00 committed by stiti
parent a1ae3bdc43
commit 6cd0e6f8e1
12 changed files with 198 additions and 60 deletions

BIN
src/.DS_Store vendored

Binary file not shown.

View File

@ -2,7 +2,7 @@ import javax.swing.*;
import java.awt.*; import java.awt.*;
/** /**
* Class containing custom settings for JButtons used in the application. * Class containing custom settings for JButtons.
* @version 1.0 * @version 1.0
* @author Moncef STITI * @author Moncef STITI
* @author Marco ORFAO * @author Marco ORFAO

View File

@ -4,7 +4,6 @@ import javax.swing.JMenu;
import java.awt.Container; import java.awt.Container;
import java.awt.BorderLayout; import java.awt.BorderLayout;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import java.awt.Color;
public class GridMakeUserInterfaceView { public class GridMakeUserInterfaceView {

View File

@ -2,12 +2,23 @@ import java.awt.*;
import java.awt.event.*; import java.awt.event.*;
import javax.swing.*; 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 { public class GridMakerCase extends JPanel implements KeyListener {
private int cellValue = 0; private int cellValue = 0; // Valeur actuelle de la case
private String displayText = ""; // Case initialement vide private String displayText = ""; // Texte à afficher dans la case
private JButton actionButton = new JButton(displayText); 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() { public GridMakerCase() {
actionButton.setOpaque(false); actionButton.setOpaque(false);
actionButton.setContentAreaFilled(false); actionButton.setContentAreaFilled(false);
@ -22,40 +33,67 @@ public class GridMakerCase extends JPanel implements KeyListener {
setPreferredSize(new Dimension(60, 60)); 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 @Override
public void keyPressed(KeyEvent e) { public void keyPressed(KeyEvent e) {
int keyChar = e.getKeyChar(); int keyChar = e.getKeyChar();
if (Character.isDigit(keyChar)) { if (Character.isDigit(keyChar)) {
int num = Character.getNumericValue(keyChar); int num = Character.getNumericValue(keyChar);
if (num >= 0 && num <= 9) { if (num >= 0 && num <= 9) {
setCellValue(num); 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 @Override
public void keyReleased(KeyEvent e) { public void keyReleased(KeyEvent e) {
// Pas de traitement nécessaire // 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 @Override
public void keyTyped(KeyEvent e) { public void keyTyped(KeyEvent e) {
// Pas de traitement nécessaire // Pas de traitement nécessaire
} }
/**
* Met à jour l'affichage de la case avec la valeur actuelle.
*/
public void updateDisplay() { public void updateDisplay() {
actionButton.setText(displayText.isEmpty() ? "" : displayText); actionButton.setText(displayText.isEmpty() ? "" : displayText);
revalidate(); revalidate();
repaint(); 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) { public void setCellValue(int value) {
this.cellValue = value; this.cellValue = value;
this.displayText = (value == 0) ? "" : String.valueOf(value); // Mettre à jour avec une chaîne vide si la valeur est 0 this.displayText = (value == 0) ? "" : String.valueOf(value); // Mettre à jour avec une chaîne vide si la valeur est 0
updateDisplay(); updateDisplay();
} }
/**
* Récupère la valeur actuelle de la case.
* @return La valeur actuelle de la case.
*/
public int getCellValue() { public int getCellValue() {
return this.cellValue; return this.cellValue;
} }
} }

View File

@ -1,5 +1,4 @@
import javax.swing.*; import javax.swing.*;
import java.awt.*;
import java.awt.event.*; import java.awt.event.*;
/** /**

View File

@ -2,7 +2,7 @@ import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
/** /**
* La classe GridMakerResetGrid ... à compléter * La classe GridMakerResetGrid sert à crée une nouvelle grille de 0.
* *
* @version 1.0 * @version 1.0
* @author Moncef STITI * @author Moncef STITI

View File

@ -1,14 +1,31 @@
import java.awt.event.*; 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 { 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(){ public GridMakerRules(){
this.rulesDialog = new RulesDialogManager(); 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 @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
rulesDialog.showDialog(); // On appelle la méthode qui affiche la fenêtre de dialogue rulesDialog.showDialog(); // On appelle la méthode qui affiche la fenêtre de dialogue
} }
} }

View File

@ -1,8 +1,18 @@
import javax.swing.*; import javax.swing.*;
import java.awt.*; 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 { 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_ON = "img/iconeAudio.png";
private final String AUDIO_OFF = "img/iconeAudioMuted.png"; private final String AUDIO_OFF = "img/iconeAudioMuted.png";
private final String MUSIC_FILE = "audio/musiqueDeFond.wav"; 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 SUBTITLE_FONT = new Font("Copperplate", Font.PLAIN, 24);
private final Font BUTTON_FONT = new Font("Copperplate", Font.BOLD, 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"}; 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 = { private final Title[] labels = {
new Title("Sudoku Solver", TITLE_FONT, TITLE_TEXT_COLOR), new Title("Sudoku Solver", TITLE_FONT, TITLE_TEXT_COLOR),
new Title("Par Moncef & Marco", SUBTITLE_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) { public HomeView(Window window) {
this.window = window; this.window = window;
createComponents(); createComponents();
addComponentsToWindow(); addComponentsToWindow();
} }
/**
* Crée les composants de la page d'accueil, y compris les panneaux de titre et de boutons.
*/
private void createComponents() { private void createComponents() {
titlePanel = new JPanel(); titlePanel = new JPanel();
buttonPanel = new JPanel(); buttonPanel = new JPanel();
ImageIcon iconeSudoku = new ImageIcon("img/sudoku.png"); ImageIcon iconeSudoku = new ImageIcon("img/sudoku.png");
imageLabel = new JLabel(iconeSudoku); imageLabel = new JLabel(iconeSudoku);
// Configuration du panneau de titre
GridLayout titleLayout = new GridLayout(2, 1); GridLayout titleLayout = new GridLayout(2, 1);
titlePanel.setLayout(titleLayout); titlePanel.setLayout(titleLayout);
titlePanel.setBackground(BACKGROUND_COLOR); titlePanel.setBackground(BACKGROUND_COLOR);
@ -43,7 +65,7 @@ public class HomeView extends JPanel {
titlePanel.add(label); titlePanel.add(label);
} }
// Button Panel // Configuration du panneau de boutons
GridLayout buttonLayout = new GridLayout(BUTTON_TEXTS.length, 1, 0, 10); GridLayout buttonLayout = new GridLayout(BUTTON_TEXTS.length, 1, 0, 10);
buttonPanel.setLayout(buttonLayout); buttonPanel.setLayout(buttonLayout);
buttonPanel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20)); buttonPanel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
@ -55,25 +77,28 @@ public class HomeView extends JPanel {
buttonPanel.add(button); 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() { public void addComponentsToWindow() {
BorderLayout layout = new BorderLayout(); BorderLayout layout = new BorderLayout();
window.getContentPane().setLayout(layout); window.getContentPane().setLayout(layout);
window.add(titlePanel, BorderLayout.NORTH); window.add(titlePanel, BorderLayout.NORTH);
window.add(buttonPanel, BorderLayout.WEST); window.add(buttonPanel, BorderLayout.WEST);
window.add(imageLabel, BorderLayout.EAST); 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); 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.setBackground(BACKGROUND_COLOR);
controlPanel.add(musicButton); controlPanel.add(musicButton); // Ajoute le bouton de contrôle audio
window.add(controlPanel, BorderLayout.SOUTH); window.add(controlPanel, BorderLayout.SOUTH); // Ajoute le panneau de contrôles à la fenêtre
window.pack(); window.pack(); // Ajuste la taille de la fenêtre pour s'adapter à son contenu
window.setLocationRelativeTo(null); window.setLocationRelativeTo(null); // Centre la fenêtre sur l'écran
window.setVisible(true); window.setVisible(true); // Rend la fenêtre visible
} }
} }

View File

@ -1,9 +1,20 @@
import javax.swing.JOptionPane; 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 { public class RulesDialogManager implements DialogManager {
/**
* Affiche la boîte de dialogue des règles du Sudoku.
*/
@Override @Override
public void showDialog() { public void showDialog() {
RulesSudoku rulesPanel = new RulesSudoku(); RulesSudoku rulesPanel = new RulesSudoku(); // Création du panneau contenant les règles
JOptionPane.showMessageDialog(null, rulesPanel, "Règles du Sudoku", JOptionPane.PLAIN_MESSAGE); JOptionPane.showMessageDialog(null, rulesPanel, "Règles du Sudoku", JOptionPane.PLAIN_MESSAGE); // Affichage de la boîte de dialogue
} }
} }

View File

@ -1,14 +1,25 @@
import javax.swing.*; import javax.swing.*;
import java.awt.*; 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 { public class RulesSudoku extends JPanel {
private Dimension FRAME_SIZE = new Dimension(400, 500); 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); 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() { public RulesSudoku() {
BorderLayout gestionnaireBorderLayout = new BorderLayout(); BorderLayout gestionnaireBorderLayout = new BorderLayout();
this.setLayout(gestionnaireBorderLayout); 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"); JLabel titleLabel = new JLabel("Règles du Sudoku");
titleLabel.setFont(new Font("Copperplate", Font.BOLD, 40)); // Police du titre 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 this.setPreferredSize(this.FRAME_SIZE); // Taille de la fenêtre des règles
} }
} }

View File

@ -1,11 +1,26 @@
import javax.swing.*; import javax.swing.*;
import java.awt.*; 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 { 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) { public Title(String text, Font font, Color color) {
super(text, SwingConstants.CENTER); super(text, SwingConstants.CENTER); // Centre le texte horizontalement
setFont(font); setFont(font); // Définit la police du texte
setForeground(color); setForeground(color); // Définit la couleur du texte
} }
} }

View File

@ -1,60 +1,82 @@
import javax.swing.*; import javax.swing.*;
import java.awt.*; 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 { 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); 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"; 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 = ""; 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() { public Window() {
super(PROGRAM_TITLE); super(PROGRAM_TITLE);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setMinimumSize(MIN_WINDOW_SIZE); this.setMinimumSize(MIN_WINDOW_SIZE);
this.setLocationRelativeTo(null); this.setLocationRelativeTo(null);
getContentPane().setBackground(new Color(54, 91, 109)); getContentPane().setBackground(BACKGROUND_COLOR);
} }
/** /**
* Get the title of the current page. * Obtient le titre de la page actuelle.
* @return The title of the current page. * @return Le titre de la page actuelle.
*/ */
public String getPageTitle() { public String getPageTitle() {
return this.PAGE_TITLE; return this.PAGE_TITLE;
} }
/** /**
* Set the title of the current page. * Définit le titre de la page actuelle.
* @param title The title of the current page. * 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) { public void setPageTitle(String title) {
this.PAGE_TITLE = title; this.PAGE_TITLE = title;
this.setTitle(this.PAGE_TITLE + " - " + Window.PROGRAM_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) { public void changeMenu(JPanel menuPanel) {
getContentPane().removeAll(); getContentPane().removeAll(); // Supprime tous les composants actuels de la fenêtre
getContentPane().add(menuPanel); getContentPane().add(menuPanel); // Ajoute le nouveau panneau
revalidate(); revalidate(); // Revalide la disposition des composants
repaint(); 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) { public static void removeAllComponents(Window window) {
window.getContentPane().removeAll(); window.getContentPane().removeAll(); // Supprime tous les composants de la fenêtre
window.revalidate(); window.revalidate(); // Revalide la disposition des composants
window.repaint(); window.repaint(); // Redessine la fenêtre
} }
} }