Création d'une seule et unique classe pour les menus principaux des deux programmes + Amélioration de la doc

This commit is contained in:
2024-05-02 17:12:59 +02:00
parent dfd9b1169e
commit a430913fa5
91 changed files with 14137 additions and 260 deletions

View File

@@ -1,14 +1,16 @@
import javax.swing.*;
/**
* La classe GMChecker est utilisée pour vérifier la cohérence de la grille.
* GMChecker est utilisée pour vérifier la cohérence de la grille.
* Elle vérifie si les lignes, les colonnes et les régions de la grille respectent les règles du jeu.
* @version 1.0
* @author Moncef STITI
* @author Marco ORFAO
*/
public class GMChecker {
/**
* La grille
*/
private GMGrid grid;
/**

View File

@@ -1,46 +0,0 @@
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* Listener for button clicks in the menu.
* It performs different actions based on the button clicked.
* @version 1.0
* @author Moncef STITI
* @author Marco ORFAO
*/
class GMHomeButtonClickListener implements ActionListener {
private Window window;
private DialogManager rulesDialogManager;
/**
* Constructs a ButtonClickListener with the specified window.
* @param window The window where the actions will be performed.
*/
public GMHomeButtonClickListener(Window window) {
this.window = window;
this.rulesDialogManager = new RulesDialogManager();
}
/**
* Performs an action based on the button clicked.
* @param e The ActionEvent representing the button click.
*/
@Override
public void actionPerformed(ActionEvent e) {
String buttonText = ((Button) e.getSource()).getText();
switch (buttonText) {
case "Générer une grille":
Window.removeAllComponents(this.window);
GMUserInterfaceView vueCreationGrille = new GMUserInterfaceView(this.window); // Lancer le créateur de grille
break;
case "Règles":
rulesDialogManager.showDialog(); // Afficher les règles
break;
case "Quitter":
System.exit(0); // Quitter le programme
break;
default:
break;
}
}
}

View File

@@ -17,7 +17,7 @@ public class GSCase extends JPanel {
private String text = ""; // Texte affiché dans la case
protected boolean isInitial = false; // Indique si la valeur de la case est initiale
protected boolean isActive; // Indique si la case est active
protected boolean isActive = true; // Indique si la case est active
private JLabel label = new JLabel(); // Étiquette pour afficher le texte
private byte digitCount = 0; // Compteur du nombre de valeurs insérées dans la case
protected int positionX; // Position X de la case dans la grille

View File

@@ -1,48 +0,0 @@
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* Listener pour les clics sur les boutons dans le menu.
* Il effectue différentes actions en fonction du bouton cliqué.
* @version 1.0
* @author Moncef STITI
* @author Marco ORFAO
*/
class GSHomeButtonClickListener implements ActionListener {
private Window window;
private DialogManager rulesDialogManager;
private GSMenu menuJeu;
/**
* Construit un ButtonClickListener avec la fenêtre spécifiée.
* @param window La fenêtre où les actions seront effectuées.
*/
public GSHomeButtonClickListener(Window window) {
this.window = window;
this.rulesDialogManager = new RulesDialogManager();
}
/**
* Effectue une action en fonction du bouton cliqué.
* @param e L'ActionEvent représentant le clic sur le bouton.
*/
@Override
public void actionPerformed(ActionEvent e) {
String buttonText = ((Button) e.getSource()).getText();
switch (buttonText) {
case "Jouer":
Window.removeAllComponents(this.window);
this.menuJeu = new GSMenu(this.window);
GSMenuController menuController = new GSMenuController(this.menuJeu, this.window);
break;
case "Règles":
rulesDialogManager.showDialog(); // Afficher les règles
break;
case "Quitter":
System.exit(0); // Quitter le programme
break;
default:
break;
}
}
}

View File

@@ -1,103 +0,0 @@
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 GSHomeView 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";
private final Dimension BUTTON_SIZE = new Dimension(300, 60);
private final Color BACKGROUND_COLOR = new Color(54, 91, 109);
private final Color TITLE_TEXT_COLOR = Color.WHITE;
private final Font TITLE_FONT = new Font("Copperplate", Font.BOLD, 75);
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", "Règles", "Quitter"};
// Tableau de titres pour le titre principal et le sous-titre
private final Title[] labels = {
new Title("Sudoku Game", TITLE_FONT, TITLE_TEXT_COLOR),
new Title("Par Moncef & Marco", SUBTITLE_FONT, TITLE_TEXT_COLOR)
};
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 GSHomeView(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);
// Utilisation de la classe Title pour le titre et le sous-titre
for (Title label : labels) {
titlePanel.add(label);
}
// 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));
buttonPanel.setBackground(BACKGROUND_COLOR);
GSHomeButtonClickListener listenerButton = new GSHomeButtonClickListener(window);
for (String text : BUTTON_TEXTS) {
Button button = new Button(text, BUTTON_SIZE, BUTTON_FONT, Color.white);
button.addActionListener(listenerButton);
buttonPanel.add(button);
}
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"); // Définit le titre de la page dans la fenêtre
FlowLayout controlPanelLayout = new FlowLayout(FlowLayout.RIGHT);
JPanel controlPanel = new JPanel(controlPanelLayout); // Panneau pour les contrôles audio
controlPanel.setBackground(BACKGROUND_COLOR);
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(); // Ajuste la taille de la fenêtre pour s'adapter à son contenu
window.setVisible(true); // Rend la fenêtre visible
}
}

View File

@@ -9,10 +9,25 @@ import java.io.*;
* @author Marco ORFAO
*/
public class GSImport {
/**
* Fenêtre précédente
*/
private Window previousFrame;
/**
* Indique si le fichier est accessible
*/
private boolean accessible;
/**
* Fichier sélectionné pour l'importation
*/
private File file;
/**
* Tableau des valeurs importées
*/
private int[] importedValues = new int[9];
/**
@@ -69,14 +84,17 @@ public class GSImport {
}
}
/**
* Permet de savoir si le fichier est accessible
* @return le booleen accessible
*/
public boolean isAccessible() {
return accessible;
}
/**
* Gets the array of imported values.
* @return the array of imported values
* Récupère le tableau des valeurs importées.
* @return le tableau des valeurs importées
*/
public int[] getImportedValues() {
return importedValues;

View File

@@ -8,14 +8,40 @@ import java.awt.*;
* @author Marco ORFAO
*/
public class GSMenu {
/**
* Fenêtre dans laquelle le menu est affiché
*/
private Window window;
private Window window; // Fenêtre dans laquelle le menu est affiché
private JPanel titlePanel; // Panneau pour le titre
private JPanel buttonPanel; // Panneau pour les boutons
private Title titleLabel; // Étiquette pour le titre
private Button importerButton; // Bouton pour importer une grille
private Button jouerButton; // Bouton pour commencer à jouer
private Button autoSolveButton; // Bouton pour résoudre automatiquement la grille
/**
* Panneau pour le titre
*/
private JPanel titlePanel;
/**
* Panneau pour les boutons
*/
private JPanel buttonPanel;
/**
* Étiquette pour le titre
*/
private Title titleLabel;
/**
* Bouton pour importer une grille
*/
private Button importerButton;
/**
* Bouton pour commencer à jouer
*/
private Button jouerButton;
/**
* Bouton pour résoudre automatiquement la grille
*/
private Button autoSolveButton;
/**
* Constructeur de la classe GSMenu.
@@ -73,15 +99,26 @@ public class GSMenu {
this.autoSolveButton.setEnabled(true); // Active le bouton "Résolution automatique"
}
// Méthodes getters pour les composants
/**
* Renvoie le bouton pour l'importation.
* @return Le bouton pour l'importation.
*/
public Button getImporterButton() {
return this.importerButton;
}
/**
* Renvoie le bouton pour démarrer le jeu.
* @return Le bouton pour démarrer le jeu.
*/
public Button getJouerButton() {
return this.jouerButton;
}
/**
* Renvoie le bouton pour résoudre automatiquement la grille.
* @return Le bouton pour résoudre automatiquement la grille.
*/
public Button getAutoSolveButton() {
return this.autoSolveButton;
}

View File

@@ -8,9 +8,20 @@ import java.awt.event.ActionListener;
* @author Marco ORFAO
*/
public class GSMenuController implements ActionListener {
private GSMenu gsMenu; // Menu Sudoku
private Window mainWindow; // Fenêtre principale
private GSGrid sudokuGrid; // Grille de Sudoku
/**
* Menu Sudoku
*/
private GSMenu gsMenu;
/**
* Fenêtre principale
*/
private Window mainWindow;
/**
* Grille de Sudoku
*/
private GSGrid sudokuGrid;
/**
* Constructeur de la classe GSMenuController.

View File

@@ -9,26 +9,61 @@ import java.awt.event.*;
*/
public class GSPlay {
// Valeur représentant une case vide
/**
* Valeur représentant une case vide
*/
private static final int EMPTY_VALUE = 0;
// Codes des touches numériques du pavé numérique
/**
* Codes des touches numériques du pavé numérique
*/
private static final int[] NUM_KEYS = {KeyEvent.VK_NUMPAD1, KeyEvent.VK_NUMPAD2, KeyEvent.VK_NUMPAD3, KeyEvent.VK_NUMPAD4, KeyEvent.VK_NUMPAD5,
KeyEvent.VK_NUMPAD6, KeyEvent.VK_NUMPAD7, KeyEvent.VK_NUMPAD8, KeyEvent.VK_NUMPAD9};
// Codes des touches numériques du clavier
/**
* Codes des touches numériques du clavier
*/
private static final int[] KEY_NUMBERS = {KeyEvent.VK_1, KeyEvent.VK_2, KeyEvent.VK_3, KeyEvent.VK_4, KeyEvent.VK_5,
KeyEvent.VK_6, KeyEvent.VK_7, KeyEvent.VK_8, KeyEvent.VK_9};
// Code de la touche de suppression
/**
* Code de la touche de suppression
*/
private static final int DELETE_KEY = KeyEvent.VK_BACK_SPACE;
/**
* Container pour le contenu de la fenêtre
*/
private Container content;
/**
* Grille de Sudoku
*/
private GSGrid ma_Grille;
private Button boutonValider = new Button("Valider",Color.lightGray);
/**
* Bouton "Valider" pour valider la grille
*/
private Button boutonValider;
/**
* Temps de démarrage du jeu
*/
private long startTime;
/**
* Temps écoulé depuis le démarrage du jeu
*/
private long vraiTime;
/**
* Fenêtre de jeu
*/
private Window gameplay;
/**
* Contrôleur pour gérer les événements de jeu
*/
private GSPlayController gsPlayController;
/**
@@ -40,6 +75,7 @@ public class GSPlay {
this.ma_Grille = grille;
this.gameplay = window;
this.gsPlayController = new GSPlayController(this);
this.boutonValider = new Button("Valider",Color.lightGray);
}
/**
@@ -98,7 +134,7 @@ public class GSPlay {
}
/**
* Méthode pour obtenir la grille
* Méthode pour obtenir la grille jouer
* @return la grille
*/
public GSGrid getMaGrille() {

View File

@@ -10,6 +10,9 @@ import java.awt.event.KeyListener;
* @author Marco ORFAO
*/
public class GSPlayController implements KeyListener, ActionListener {
/**
* Le jeu de la grille
*/
private GSPlay gsPlay;
/**
@@ -56,6 +59,7 @@ public class GSPlayController implements KeyListener, ActionListener {
*/
@Override
public void keyReleased(KeyEvent e) {
// Non utilisé
}
/**

View File

@@ -8,11 +8,25 @@ import java.awt.*;
* @author Marco ORFAO
*/
public class GSSolver {
/**
* Grille de Sudoku à résoudre
*/
private GSGrid grid;
private GSGrid grid; // Grille de Sudoku à résoudre
private Window window; // Fenêtre dans laquelle afficher la résolution
private JLabel label = new JLabel("Resolution en cours..."); // Étiquette pour afficher le statut de la résolution
private long startTime; // Temps de début de la résolution
/**
* Fenêtre dans laquelle afficher la résolution
*/
private Window window;
/**
* Étiquette pour afficher le statut de la résolution
*/
private JLabel label = new JLabel("Resolution en cours...");
/**
* Temps de début de la résolution
*/
private long startTime;
/**
* Constructeur de la classe GSSolver.

View File

@@ -5,8 +5,10 @@
* @author Marco ORFAO
*/
public class GSTest {
private GSGrid ma_Grille;
/**
* La grille
*/
private GSGrid ma_Grille;
/**
* Constructeur de la classe GSTest.

View File

@@ -1,12 +1,14 @@
/**
* La classe GSWin gère l'affichage d'une fenêtre de félicitations pour avoir résolu le Sudoku.
* GSWin gère l'affichage d'une fenêtre de félicitations pour avoir résolu le Sudoku.
* @version 1.0
* @author Moncef STITI
* @author Marco ORFAO
*/
public class GSWin implements DialogManager {
private long solvingTime; // Temps de résolution du Sudoku
/**
* Temps de résolution du Sudoku
*/
private long solvingTime;
/**
* Constructeur de la classe GSWin.

View File

@@ -1,6 +1,7 @@
public class GridMaker{
public static void main(String[] args) {
Window fenetre = new Window(); // Création d'une fenêtre
GMHomeView menu = new GMHomeView(fenetre); // Création du menu sur la fenêtre
String[] gmButtonTexts = {"Générer une grille", "Règles", "Quitter"}; // Texte des boutons pour le menu du GridMaker
HomeView gmHomeView = new HomeView(fenetre, "Sudoku Grid Creator", "Par Moncef & Marco", gmButtonTexts);
}
}

View File

@@ -1,6 +1,7 @@
public class GridSolver{
public static void main(String[] args) {
Window fenetre = new Window(); // Création d'une fenêtre
GSHomeView menu = new GSHomeView(fenetre); // Création du menu sur la fenêtre
String[] gsButtonTexts = {"Jouer", "Règles", "Quitter"}; // Texte des boutons pour le menu du GridSolver
HomeView gsHomeView = new HomeView(fenetre, "Sudoku Game", "Par Moncef & Marco", gsButtonTexts);
}
}

View File

@@ -0,0 +1,53 @@
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* Listener pour les clics sur les boutons dans le menu.
* Il effectue différentes actions en fonction du bouton cliqué.
* @version 1.0
* @author Moncef STITI
* @author Marco ORFAO
*/
public class HomeButtonClickListener implements ActionListener {
/**
* La fenêtre
*/
private Window window;
/**
* Construit un ButtonClickListener avec la fenêtre spécifiée.
* @param window La fenêtre où les actions seront effectuées.
*/
public HomeButtonClickListener(Window window) {
this.window = window;
}
/**
* Effectue une action en fonction du bouton cliqué.
* @param e L'ActionEvent représentant le clic sur le bouton.
*/
@Override
public void actionPerformed(ActionEvent e) {
String buttonText = ((Button) e.getSource()).getText();
switch (buttonText) {
case "Jouer":
Window.removeAllComponents(this.window);
GSMenu menuJeu = new GSMenu(this.window);
GSMenuController menuController = new GSMenuController(menuJeu, this.window);
break;
case "Générer une grille":
Window.removeAllComponents(this.window);
GMUserInterfaceView vueCreationGrille = new GMUserInterfaceView(this.window);
break;
case "Règles":
DialogManager rulesDialogManager = new RulesDialogManager();
rulesDialogManager.showDialog(); // Afficher les règles
break;
case "Quitter":
System.exit(0); // Quitter le programme
break;
default:
break;
}
}
}

View File

@@ -1,5 +1,7 @@
import javax.swing.*;
import java.awt.*;
import java.util.ArrayList;
import java.util.List;
/**
* HomeView représente la vue de la page d'accueil de l'application Sudoku.
@@ -10,7 +12,7 @@ import java.awt.*;
* @author Moncef STITI
* @author Marco ORFAO
*/
public class GMHomeView 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";
@@ -22,27 +24,31 @@ public class GMHomeView extends JPanel {
private final Font TITLE_FONT = new Font("Copperplate", Font.BOLD, 75);
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 = {"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 Grid Creator", TITLE_FONT, TITLE_TEXT_COLOR),
new Title("Par Moncef & Marco", SUBTITLE_FONT, TITLE_TEXT_COLOR)
};
private final String[] BUTTON_TEXTS; // Textes des boutons
private final Title[] labels; // Tableau de titres pour le titre principal et le sous-titre
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
private List<Button> buttonsList; // Liste des boutons créés
/**
* 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.
*
* @param window La fenêtre parente.
* @param mainTitle Le titre principal de la page.
* @param subTitle Le sous-titre de la page.
* @param buttonTexts Les textes des boutons.
*/
public GMHomeView(Window window) {
public HomeView(Window window, String mainTitle, String subTitle, String[] buttonTexts) {
this.window = window;
this.BUTTON_TEXTS = buttonTexts;
this.labels = new Title[]{new Title(mainTitle, TITLE_FONT, TITLE_TEXT_COLOR),
new Title(subTitle, SUBTITLE_FONT, TITLE_TEXT_COLOR)};
buttonsList = new ArrayList<>();
createComponents();
addComponentsToWindow();
}
@@ -70,11 +76,12 @@ public class GMHomeView extends JPanel {
buttonPanel.setLayout(buttonLayout);
buttonPanel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
buttonPanel.setBackground(BACKGROUND_COLOR);
GMHomeButtonClickListener listenerButton = new GMHomeButtonClickListener(window);
HomeButtonClickListener listenerButton = new HomeButtonClickListener(window);
for (String text : BUTTON_TEXTS) {
Button button = new Button(text, BUTTON_SIZE, BUTTON_FONT, Color.white);
button.addActionListener(listenerButton);
buttonPanel.add(button);
buttonsList.add(button); // Ajout du bouton à la liste
}
musicButton = new MusicButton(AUDIO_ON, AUDIO_OFF, MUSIC_FILE); // Bouton pour contrôler la musique
@@ -100,4 +107,31 @@ public class GMHomeView extends JPanel {
window.pack(); // Ajuste la taille de la fenêtre pour s'adapter à son contenu
window.setVisible(true); // Rend la fenêtre visible
}
/**
* Récupère le premier bouton créé.
*
* @return Le premier bouton.
*/
public Button getFirstButton() {
return buttonsList.get(0);
}
/**
* Récupère le deuxième bouton créé.
*
* @return Le deuxième bouton.
*/
public Button getSecondButton() {
return buttonsList.get(1);
}
/**
* Récupère le troisième bouton créé.
*
* @return Le troisième bouton.
*/
public Button getThirdButton() {
return buttonsList.get(2);
}
}

View File

@@ -7,11 +7,27 @@ import javax.swing.*;
* @author Marco ORFAO
*/
public class MusicButton extends JButton {
private static MusicPlayer currentMusicPlayer;
/**
* Représente le lecteur de musique actuellement en cours de lecture.
*/
private static MusicPlayer currentMusicPlayer;
/**
* L'icône à afficher lorsque la musique est activée.
*/
private ImageIcon iconOn;
/**
* L'icône à afficher lorsque la musique est désactivée.
*/
private ImageIcon iconOff;
/**
* Le lecteur de musique associé à ce bouton.
*/
private MusicPlayer musicPlayer;
/**
* Constructeur : Construit un MusicButton.
* @param onIconPath Le chemin du fichier d'icône lorsque la musique est activée.
@@ -32,7 +48,7 @@ public class MusicButton extends JButton {
this.musicPlayer = new MusicPlayer(musicFilePath);
addActionListener(e -> {
this.addActionListener(e -> {
if (currentMusicPlayer != null && currentMusicPlayer.isPlaying()) {
currentMusicPlayer.stop();
currentMusicPlayer = null;

View File

@@ -9,7 +9,13 @@ import javax.sound.sampled.*;
*/
public class MusicPlayer {
/**
* Clip utilisé pour jouer la musique
*/
private Clip clip;
/**
* Indique si la musique est en cours de lecture ou non
*/
private boolean isPlaying;
/**

View File

@@ -9,8 +9,14 @@ import java.awt.*;
* @author Marco ORFAO
*/
public class RulesSudoku extends JPanel {
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
/**
* Taille de la fenêtre des règles
*/
private Dimension FRAME_SIZE = new Dimension(400, 500);
/**
* Couleur d'arrière-plan du panneau
*/
private Color BACKGROUND_COLOR = new Color(54, 91, 109);
/**
* Constructeur par défaut de RulesSudoku.
@@ -21,9 +27,7 @@ public class RulesSudoku extends JPanel {
this.setLayout(gestionnaireBorderLayout);
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
titleLabel.setForeground(Color.WHITE); // Couleur du titre
Title titleLabel = new Title("Règles du Sudoku",new Font("Copperplate", Font.BOLD, 40),Color.WHITE);
JTextArea rulesTextArea = new JTextArea();
rulesTextArea.setText("Les règles du Sudoku :\n\n" +

View File

@@ -30,7 +30,7 @@ public class Window extends JFrame {
/**
* Constructeur de la classe Window.
* Initialise la fenêtre avec le titre du programme, la taille minimale et la couleur de fond.
* Initialise la fenêtre avec la taille minimale et la couleur de fond.
*/
public Window() {
super(PROGRAM_TITLE);
@@ -40,14 +40,6 @@ public class Window extends JFrame {
getContentPane().setBackground(BACKGROUND_COLOR);
}
/**
* Obtient le titre de la page actuelle.
* @return Le titre de la page actuelle.
*/
public String getPageTitle() {
return this.PAGE_TITLE;
}
/**
* 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.