import javax.swing.*; import java.awt.*; import java.awt.event.*; public class SaisieGrille extends JPanel { private static final int TAILLE_GRILLE = 3; private static final int TAILLE_REGION = 3; private static final int TAILLE_CELLULE = 50; private int[][] grille; private int[][] grilleInitiale; // Pour stocker la grille initiale private int ligneSelectionnee = -1; private int colonneSelectionnee = -1; public SaisieGrille(int[][] grille) { this.grille = grille; // Copie de la grille initiale this.grilleInitiale = new int[grille.length][grille[0].length]; for (int i = 0; i < grille.length; i++) { for (int j = 0; j < grille[i].length; j++) { this.grilleInitiale[i][j] = grille[i][j]; } } setPreferredSize(new Dimension(TAILLE_GRILLE * TAILLE_REGION * TAILLE_CELLULE, TAILLE_GRILLE * TAILLE_REGION * TAILLE_CELLULE)); setFocusable(true); // Permet au JPanel de recevoir les événements de souris addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { int x = e.getX() / TAILLE_CELLULE; int y = e.getY() / TAILLE_CELLULE; if (x >= 0 && x < TAILLE_GRILLE * TAILLE_REGION && y >= 0 && y < TAILLE_GRILLE * TAILLE_REGION) { ligneSelectionnee = y; colonneSelectionnee = x; System.out.println("Case sélectionnée : (" + ligneSelectionnee + ", " + colonneSelectionnee + ")"); if (grilleInitiale[ligneSelectionnee][colonneSelectionnee] == 0) { // Ne permet la modification que pour les cellules vides String valeurStr = JOptionPane.showInputDialog(null, "Entrez la valeur pour la cellule sélectionnée :"); try { int valeur = Integer.parseInt(valeurStr); grille[ligneSelectionnee][colonneSelectionnee] = valeur; repaint(); } catch (NumberFormatException ex) { JOptionPane.showMessageDialog(null, "Saisie invalide. Veuillez entrer un nombre."); } } else { JOptionPane.showMessageDialog(null, "Vous ne pouvez pas modifier la valeur par défaut."); } } } }); } public int[][] getGrilleInitiale() { return grilleInitiale; } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); // Dessiner les contours de la grille (en gras) Graphics2D g2d = (Graphics2D) g; Stroke ancienStroke = g2d.getStroke(); // Sauvegarder le style de ligne précédent g2d.setStroke(new BasicStroke(4)); // Épaisseur de ligne de 4 pixels for (int i = 0; i <= TAILLE_GRILLE * TAILLE_REGION; i++) { if (i % TAILLE_REGION == 0) { g2d.drawLine(0, i * TAILLE_CELLULE, TAILLE_GRILLE * TAILLE_REGION * TAILLE_CELLULE, i * TAILLE_CELLULE); g2d.drawLine(i * TAILLE_CELLULE, 0, i * TAILLE_CELLULE, TAILLE_GRILLE * TAILLE_REGION * TAILLE_CELLULE); } } // Rétablir le style de ligne précédent g2d.setStroke(ancienStroke); // Dessiner les cellules de la grille for (int i = 0; i < TAILLE_GRILLE * TAILLE_REGION; i++) { for (int j = 0; j < TAILLE_GRILLE * TAILLE_REGION; j++) { g.setColor(Color.BLACK); g.drawRect(j * TAILLE_CELLULE, i * TAILLE_CELLULE, TAILLE_CELLULE, TAILLE_CELLULE); int valeur = grille[i][j]; if (valeur != 0) { g.drawString(String.valueOf(valeur), j * TAILLE_CELLULE + TAILLE_CELLULE / 2, i * TAILLE_CELLULE + TAILLE_CELLULE / 2); } } } } }