Modification de commentaires + correction de bugs

This commit is contained in:
stiti 2024-04-30 12:51:21 +02:00
parent 19bfa89148
commit cdcbc4f485
4 changed files with 41 additions and 14 deletions

View File

@ -26,11 +26,19 @@ public class GMCase extends JPanel {
*/ */
protected boolean isActive = false; protected boolean isActive = false;
private int row;
private int col;
private GMGrid grille;
/** /**
* Constructeur par défaut de GMCase. * Constructeur par défaut de GMCase.
* Initialise le bouton avec les propriétés nécessaires, crée un GMCaseListener et l'ajoute au bouton. * Initialise le bouton avec les propriétés nécessaires, crée un GMCaseListener et l'ajoute au bouton.
*/ */
public GMCase() { public GMCase(GMGrid grille, int row, int col) {
this.grille = grille;
this.row = row;
this.col = col;
actionButton.setOpaque(false); actionButton.setOpaque(false);
actionButton.setContentAreaFilled(false); actionButton.setContentAreaFilled(false);
actionButton.setBorderPainted(false); actionButton.setBorderPainted(false);
@ -43,7 +51,7 @@ public class GMCase extends JPanel {
setPreferredSize(new Dimension(60, 60)); setPreferredSize(new Dimension(60, 60));
// Crée un GMCaseListener et l'ajoute au bouton // Crée un GMCaseListener et l'ajoute au bouton
GMCaseKeyListener listener = new GMCaseKeyListener(this); GMCaseKeyListener listener = new GMCaseKeyListener(this,this.grille,this.row,this.col);
actionButton.addKeyListener(listener); actionButton.addKeyListener(listener);
GMCaseMouseListener mouseListener = new GMCaseMouseListener(); GMCaseMouseListener mouseListener = new GMCaseMouseListener();

View File

@ -1,22 +1,32 @@
import java.awt.event.KeyEvent; import java.awt.event.KeyEvent;
import java.awt.event.KeyListener; import java.awt.event.KeyListener;
import javax.swing.JOptionPane;
/** /**
* GMCaseKeyListener est un KeyListener utilisé pour écouter les événements de touche dans GridMakerCase. * GMCaseKeyListener est un KeyListener utilisé pour écouter les événements de touche dans GMCase.
* @version 1.0 * @version 1.0
* @author Moncef STITI * @author Moncef STITI
* @author Marco ORFAO * @author Marco ORFAO
*/ */
public class GMCaseKeyListener implements KeyListener { public class GMCaseKeyListener implements KeyListener {
private GMChecker checker;
private GMCase gridMakerCase; private GMCase gridMakerCase;
private GMCase gridMakerCaseCopy;
private GMGrid grille;
private int row;
private int col;
/** /**
* Constructeur de GridMakerCaseListener. * Constructeur de GridMakerCaseListener.
* @param gridMakerCase La case à écouter. * @param gridMakerCase La case à écouter.
*/ */
public GMCaseKeyListener(GMCase gridMakerCase) { public GMCaseKeyListener(GMCase gridMakerCase,GMGrid grille, int row, int col) {
this.gridMakerCase = gridMakerCase; this.gridMakerCase = gridMakerCase;
this.grille = grille;
this.row = row;
this.col = col;
this.checker = new GMChecker(this.grille);
} }
/** /**
@ -26,12 +36,25 @@ public class GMCaseKeyListener implements KeyListener {
*/ */
@Override @Override
public void keyPressed(KeyEvent e) { public void keyPressed(KeyEvent e) {
int keyChar = e.getKeyChar(); char keyChar = e.getKeyChar();
if (Character.isDigit(keyChar)) { // Vérifier si la touche enfoncée est un chiffre entre 1 et 9
int num = Character.getNumericValue(keyChar); if (Character.isDigit(keyChar) && keyChar >= '0' && keyChar <= '9') {
if (num >= 0 && num <= 9) { int value = Character.getNumericValue(keyChar);
gridMakerCase.setCellValue(num); // Sauvegarder temporairement la valeur actuelle de la case
int previousValue = gridMakerCase.getCellValue();
// Mettre temporairement la nouvelle valeur dans la case
gridMakerCase.setCellValue(value);
// Vérifier si la grille respecte les règles du Sudoku
if (checker.checkGrid()) {
// Si oui, pas besoin de faire autre chose car la valeur est déjà mise à jour
} else {
// Si non, restaurer la valeur précédente et afficher un message d'erreur
gridMakerCase.setCellValue(previousValue);
JOptionPane.showMessageDialog(null, "La valeur ne respecte pas les règles du Sudoku.", "Erreur", JOptionPane.ERROR_MESSAGE);
} }
} else {
// Afficher un message d'erreur si la touche enfoncée n'est pas valide
JOptionPane.showMessageDialog(null, "Veuillez entrer un chiffre entre 1 et 9.", "Erreur", JOptionPane.ERROR_MESSAGE);
} }
} }

View File

@ -51,7 +51,7 @@ public class GMGrid extends JPanel {
for (int j = 0; j < 9; j++) { for (int j = 0; j < 9; j++) {
int zoneRow = i / 3; int zoneRow = i / 3;
int zoneCol = j / 3; int zoneCol = j / 3;
gridCases[i][j] = new GMCase(); gridCases[i][j] = new GMCase(this,i,j);
zones[zoneRow][zoneCol].add(gridCases[i][j]); zones[zoneRow][zoneCol].add(gridCases[i][j]);
gridCases[i][j].setBorder(determineBorder(i, j)); // Utilisation de la fonction pour définir les bordures gridCases[i][j].setBorder(determineBorder(i, j)); // Utilisation de la fonction pour définir les bordures
gridCases[i][j].setBackground(Color.WHITE); gridCases[i][j].setBackground(Color.WHITE);

View File

@ -33,15 +33,11 @@ public class GSCase extends JPanel {
public GSCase(GSGrid grid, int x, int y) { public GSCase(GSGrid grid, int x, int y) {
this.positionX = x; this.positionX = x;
this.positionY = y; this.positionY = y;
this.primaryValue = 0; // Valeur par défaut this.primaryValue = 0; // Valeur par défaut
this.setBackground(Color.white); // Couleur de fond par défaut this.setBackground(Color.white); // Couleur de fond par défaut
this.parentGrid = grid; this.parentGrid = grid;
this.add(label); this.add(label);
layoutSetup(); layoutSetup();
// Initialisation de l'écouteur de souris // Initialisation de l'écouteur de souris
this.mouseListener = new GSCaseMouseListener(this); this.mouseListener = new GSCaseMouseListener(this);
this.addMouseListener(this.mouseListener); this.addMouseListener(this.mouseListener);