From cdcbc4f48531b0ec9307efdfa7fd4823550b49a4 Mon Sep 17 00:00:00 2001 From: stiti Date: Tue, 30 Apr 2024 12:51:21 +0200 Subject: [PATCH] Modification de commentaires + correction de bugs --- src/GMCase.java | 12 ++++++++++-- src/GMCaseKeyListener.java | 37 ++++++++++++++++++++++++++++++------- src/GMGrid.java | 2 +- src/GSCase.java | 4 ---- 4 files changed, 41 insertions(+), 14 deletions(-) diff --git a/src/GMCase.java b/src/GMCase.java index 4b004f4..a0b2266 100755 --- a/src/GMCase.java +++ b/src/GMCase.java @@ -26,11 +26,19 @@ public class GMCase extends JPanel { */ protected boolean isActive = false; + private int row; + private int col; + private GMGrid grille; + /** * 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. */ - public GMCase() { + public GMCase(GMGrid grille, int row, int col) { + this.grille = grille; + this.row = row; + this.col = col; + actionButton.setOpaque(false); actionButton.setContentAreaFilled(false); actionButton.setBorderPainted(false); @@ -43,7 +51,7 @@ public class GMCase extends JPanel { setPreferredSize(new Dimension(60, 60)); // 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); GMCaseMouseListener mouseListener = new GMCaseMouseListener(); diff --git a/src/GMCaseKeyListener.java b/src/GMCaseKeyListener.java index e9a19bd..ffc5a57 100644 --- a/src/GMCaseKeyListener.java +++ b/src/GMCaseKeyListener.java @@ -1,22 +1,32 @@ import java.awt.event.KeyEvent; 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 * @author Moncef STITI * @author Marco ORFAO */ public class GMCaseKeyListener implements KeyListener { + private GMChecker checker; private GMCase gridMakerCase; + private GMCase gridMakerCaseCopy; + private GMGrid grille; + private int row; + private int col; /** * Constructeur de GridMakerCaseListener. * @param gridMakerCase La case à écouter. */ - public GMCaseKeyListener(GMCase gridMakerCase) { + public GMCaseKeyListener(GMCase gridMakerCase,GMGrid grille, int row, int col) { 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 public void keyPressed(KeyEvent e) { - int keyChar = e.getKeyChar(); - if (Character.isDigit(keyChar)) { - int num = Character.getNumericValue(keyChar); - if (num >= 0 && num <= 9) { - gridMakerCase.setCellValue(num); + char keyChar = e.getKeyChar(); + // Vérifier si la touche enfoncée est un chiffre entre 1 et 9 + if (Character.isDigit(keyChar) && keyChar >= '0' && keyChar <= '9') { + int value = Character.getNumericValue(keyChar); + // 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); } } diff --git a/src/GMGrid.java b/src/GMGrid.java index 498e0f7..5b60e53 100755 --- a/src/GMGrid.java +++ b/src/GMGrid.java @@ -51,7 +51,7 @@ public class GMGrid extends JPanel { for (int j = 0; j < 9; j++) { int zoneRow = i / 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]); gridCases[i][j].setBorder(determineBorder(i, j)); // Utilisation de la fonction pour définir les bordures gridCases[i][j].setBackground(Color.WHITE); diff --git a/src/GSCase.java b/src/GSCase.java index 955615b..15fd164 100755 --- a/src/GSCase.java +++ b/src/GSCase.java @@ -33,15 +33,11 @@ public class GSCase extends JPanel { public GSCase(GSGrid grid, int x, int y) { this.positionX = x; this.positionY = y; - this.primaryValue = 0; // Valeur par défaut - this.setBackground(Color.white); // Couleur de fond par défaut - this.parentGrid = grid; this.add(label); layoutSetup(); - // Initialisation de l'écouteur de souris this.mouseListener = new GSCaseMouseListener(this); this.addMouseListener(this.mouseListener);