import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Main { public static void main(String[] args) { System.out.println("Le programme Main a démarré."); // Création de la fenêtre de dialogue pour choisir le mode de résolution JFrame choixFrame = new JFrame("Choix de résolution du Sudoku"); choixFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); choixFrame.setSize(400, 200); choixFrame.setLayout(new BorderLayout()); choixFrame.setLocationRelativeTo(null); // Centrer la fenêtre sur l'écran JLabel label = new JLabel("Choisissez le mode de résolution du Sudoku :"); label.setHorizontalAlignment(JLabel.CENTER); JButton automatiqueButton = new JButton("Automatique"); JButton manuelButton = new JButton("Manuel"); JPanel boutonsPanel = new JPanel(); boutonsPanel.setLayout(new FlowLayout()); boutonsPanel.add(automatiqueButton); boutonsPanel.add(manuelButton); choixFrame.add(label, BorderLayout.NORTH); choixFrame.add(boutonsPanel, BorderLayout.CENTER); choixFrame.setVisible(true); // Gestion du bouton "Automatique" automatiqueButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { choixFrame.dispose(); // Fermer la fenêtre de choix int[][] grille = GenerateurSudoku.genererGrille(); // Obtenir la grille par défaut System.out.println("Grille Sudoku générée avec succès."); // Résoudre automatiquement le Sudoku if (Resolveur.resoudreSudoku(grille)) { // Créer et afficher la fenêtre principale avec la grille résolue afficherFenetre(grille, true); } else { JOptionPane.showMessageDialog(null, "Impossible de résoudre la grille."); } } }); // Gestion du bouton "Manuel" manuelButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { choixFrame.dispose(); // Fermer la fenêtre de choix int[][] grille = GenerateurSudoku.genererGrille(); // Obtenir la grille par défaut System.out.println("Grille Sudoku générée avec succès."); // Créer et afficher la fenêtre principale pour la saisie manuelle afficherFenetre(grille, false); } }); } // Fonction pour créer et afficher la fenêtre principale avec la grille spécifiée private static void afficherFenetre(int[][] grille, boolean modeAutomatique) { JFrame frame = new JFrame("Sudoku"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); SaisieGrille saisieGrille = new SaisieGrille(grille); // Utilisation de la classe SaisieGrille pour permettre la saisie des valeurs if (!modeAutomatique) { // Ajouter le bouton "Réinitialiser" seulement en mode manuel JButton reinitialiserButton = new JButton("Réinitialiser"); reinitialiserButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { Reinitialiser reinitialiser = new Reinitialiser(grille, saisieGrille); reinitialiser.actionPerformed(e); } }); frame.add(reinitialiserButton, BorderLayout.SOUTH); // Ajouter le bouton "Réinitialiser" } frame.add(saisieGrille, BorderLayout.CENTER); // Ajouter la grille à la fenêtre 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."); } }