import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class SudokuButtonListener implements ActionListener { private int ligne; private int col; private Sudoku sudoku; private JButton[][] boutons; public SudokuButtonListener(int ligne, int col, Sudoku sudoku, JButton[][] boutons) { this.ligne = ligne; this.col = col; this.sudoku = sudoku; this.boutons = boutons; } @Override public void actionPerformed(ActionEvent e) { String input = JOptionPane.showInputDialog("Entrez un nombre :"); if (input != null && input.length() > 0) { try { int num = Integer.parseInt(input); sudoku.getGrid().getCell(ligne, col).setValue(num); if (num == 0) { boutons[ligne][col].setText(""); // Case vide si le nombre est 0 } else { boutons[ligne][col].setText(String.valueOf(num)); } if (!isValidMove(num, ligne, col)) { boutons[ligne][col].setForeground(Color.RED); // Met le texte en rouge en cas de mouvement invalide } else { boutons[ligne][col].setForeground(Color.BLACK); // Réinitialise la couleur du texte } } catch (NumberFormatException ex) { JOptionPane.showMessageDialog(null, "Veuillez entrer un nombre valide."); } } } private boolean isValidMove(int num, int ligne, int col) { return isValidRow(num, ligne) && isValidCol(num, col) && isValidBox(num, ligne - ligne % 3, col - col % 3); } private boolean isValidRow(int num, int ligne) { for (int i = 0; i < 9; i++) { if (sudoku.getGrid().getCell(ligne, i).getValue() == num && i != col) { return false; } } return true; } private boolean isValidCol(int num, int col) { for (int i = 0; i < 9; i++) { if (sudoku.getGrid().getCell(i, col).getValue() == num && i != ligne) { return false; } } return true; } private boolean isValidBox(int num, int Row, int Col) { for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { int ligne = i + Row; int col = j + Col; if (sudoku.getGrid().getCell(ligne, col).getValue() == num && (ligne != this.ligne || col != this.col)) { return false; } } } return true; } }