import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import javax.swing.filechooser.FileNameExtensionFilter; public class SudokuUI extends JFrame { private Sudoku sudoku; private JButton[][] buttons; public SudokuUI(Sudoku sudoku) { this.sudoku = sudoku; this.buttons = new JButton[9][9]; setTitle("Sudoku"); setDefaultCloseOperation(EXIT_ON_CLOSE); JPanel gridPanel = new JPanel(new GridLayout(9, 9)); gridPanel.setBackground(Color.WHITE); gridPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); // Création des boutons de la grille createGridButtons(gridPanel); // Création du bouton "Résoudre" createSolveButton(); // Création des boutons "Charger" et "Générer" createLoadButton(); createGenerateButton(); // Calcul de la taille préférée de la fenêtre en fonction de la taille de la grille int preferredSize = 50 * 9; // 50 est la taille approximative d'un bouton gridPanel.setPreferredSize(new Dimension(preferredSize, preferredSize)); add(gridPanel); pack(); // Redimensionne automatiquement la fenêtre pour s'adapter à la taille du panneau setLocationRelativeTo(null); setVisible(true); } private void createGridButtons(JPanel gridPanel) { Grid grid = sudoku.getGrid(); // Obtenez la grille à partir de Sudoku for (int row = 0; row < 9; row++) { for (int col = 0; col < 9; col++) { JButton button = new JButton(); button.setFont(new Font("Arial", Font.BOLD, 24)); button.setContentAreaFilled(false); button.setBorder(BorderFactory.createLineBorder(Color.BLACK)); button.addActionListener(new SudokuButtonListener(row, col, sudoku, buttons)); gridPanel.add(button); buttons[row][col] = button; // Mettez à jour le texte des boutons avec les valeurs de la grille Sudoku int value = grid.getCell(row, col).getValue(); buttons[row][col].setText(value == 0 ? "" : String.valueOf(value)); } } } private void createSolveButton() { JButton solveButton = new JButton("Résoudre"); solveButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { SudokuSolver solver = new SudokuSolver(); // Créez une instance de SudokuSolver Grid solvedGrid = new Grid(); // Créez une nouvelle grille pour stocker la solution solvedGrid.copyFrom(sudoku.getGrid()); // Copiez la grille actuelle de Sudoku // Résolvez la grille if (solver.solve(solvedGrid)) { // Si une solution est trouvée, mettez à jour la grille Sudoku avec la solution sudoku.getGrid().copyFrom(solvedGrid); updateGrid(); } else { // Sinon, affichez un message indiquant que la grille est insoluble JOptionPane.showMessageDialog(null, "La grille est insoluble."); } } }); JPanel buttonPanel = new JPanel(); buttonPanel.add(solveButton); add(buttonPanel, BorderLayout.SOUTH); } private void createLoadButton() { JButton loadButton = new JButton("Charger"); loadButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JFileChooser fileChooser = new JFileChooser(); FileNameExtensionFilter filter = new FileNameExtensionFilter("Fichiers de grille Sudoku (*.gri)", "gri"); fileChooser.setFileFilter(filter); int returnValue = fileChooser.showOpenDialog(null); if (returnValue == JFileChooser.APPROVE_OPTION) { File selectedFile = fileChooser.getSelectedFile(); sudoku.loadGridFromFile(selectedFile.getAbsolutePath()); updateGrid(); } } }); JPanel buttonPanel = new JPanel(); buttonPanel.add(loadButton); add(buttonPanel, BorderLayout.NORTH); } private void createGenerateButton() { JButton generateButton = new JButton("Générer"); generateButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // Générer une nouvelle grille Sudoku Grid newGrid = GenerateGrid.generatePuzzleGrid(); // Définir la nouvelle grille dans l'instance de Sudoku sudoku.setGrid(newGrid); // Afficher la grille générée dans la console sudoku.printGrid(); // Mettre à jour l'interface utilisateur pour afficher la nouvelle grille updateGrid(); } }); JPanel buttonPanel = new JPanel(); buttonPanel.add(generateButton); add(buttonPanel, BorderLayout.EAST); } private void updateGrid() { Grid grid = sudoku.getGrid(); for (int row = 0; row < 9; row++) { for (int col = 0; col < 9; col++) { int value = grid.getCell(row, col).getValue(); buttons[row][col].setText(value == 0 ? "" : String.valueOf(value)); } } } }