import javax.swing.*; import java.awt.BorderLayout; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; public class Main { public static void main(String[] args) { System.out.println("Le programme Main a démarré."); int[][] grid = SudokuGenerator.readGridFromFile(); // Demander à l'utilisateur de sélectionner un fichier de grille System.out.println("Grille Sudoku générée à partir du fichier avec succès."); JFrame frame = new JFrame("Sudoku"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Enter enterPanel = new Enter(grid); // Utilisation de la classe Enter pour permettre la saisie des valeurs // Ajout de deux boutons JButton solveButton = new JButton("Solve"); JButton resetButton = new JButton("Reset"); JPanel buttonPanel = new JPanel(); buttonPanel.add(solveButton); buttonPanel.add(resetButton); // Ajout des composants au frame frame.add(enterPanel, BorderLayout.CENTER); frame.add(buttonPanel, BorderLayout.SOUTH); // Ajout de l'écouteur d'événements au bouton "Reset" resetButton.addActionListener(new Reset(grid, enterPanel)); // Ajout de l'écouteur d'événements au bouton "Solve" solveButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { long startTime = System.nanoTime(); // Temps avant la résolution if (Resolve.solveSudoku(grid)) { long endTime = System.nanoTime(); // Temps après la résolution long duration = (endTime - startTime) / 1000000; // Durée en millisecondes enterPanel.repaint(); // Redessiner la grille après la résolution JOptionPane.showMessageDialog(frame, "Grille résolue avec succès en " + duration + " millisecondes !"); } else { JOptionPane.showMessageDialog(frame, "Impossible de résoudre la grille."); } } }); frame.pack(); frame.setLocationRelativeTo(null); // Centrer la fenêtre sur l'écran frame.setVisible(true); System.out.println("La fenêtre Sudoku a été affichée."); } }