Ajout de commentaires pour la documentation du code
This commit is contained in:
parent
a1ae3bdc43
commit
6cd0e6f8e1
BIN
src/.DS_Store
vendored
BIN
src/.DS_Store
vendored
Binary file not shown.
@ -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
|
||||
|
@ -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 {
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,4 @@
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.*;
|
||||
|
||||
/**
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user