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.*;
/**
* 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

View File

@ -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 {

View File

@ -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;
}
}

View File

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

View File

@ -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

View File

@ -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
}
}

View File

@ -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
}
}

View File

@ -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
}
}
}

View File

@ -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
}
}

View File

@ -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
}
}

View File

@ -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
}
}