import javax.swing.*; import java.awt.*; import java.io.FileInputStream; /** * Fenêtre du menu principal s'affichant au lancement de l'application. * Permet de démarrer, reprendre ou quitter une partie. */ public class MenuPrincipal extends JFrame { /** Largeur de la fenêtre en pixels. */ private static final int LARGEUR_FENETRE = 400; /** Hauteur de la fenêtre en pixels. */ private static final int HAUTEUR_FENETRE = 300; /** Position X initiale de la fenêtre sur l'écran. */ private static final int POSITION_X = 100; /** Position Y initiale de la fenêtre sur l'écran. */ private static final int POSITION_Y = 100; /** Nombre de lignes pour la disposition des boutons. */ private static final int LIGNES_GRILLE = 3; /** Nombre de colonnes pour la disposition des boutons. */ private static final int COLONNES_GRILLE = 1; /** Bouton permettant de lancer une nouvelle partie personnalisée. */ private JButton boutonNouvellePartie; /** Bouton permettant de recharger la dernière sauvegarde trouvée. */ private JButton boutonReprendre; /** Bouton permettant de fermer complètement l'application. */ private JButton boutonQuitter; /** * Constructeur du menu principal. * Initialise l'interface graphique en respectant les méthodes du cours. */ public MenuPrincipal() { super("Démineur - Menu Principal"); this.setSize(LARGEUR_FENETRE, HAUTEUR_FENETRE); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLocation(POSITION_X, POSITION_Y); initialiserPanneauBoutons(); } /** * Crée le panneau, instancie les boutons et les ajoute à l'interface. */ private void initialiserPanneauBoutons() { JPanel panneauBoutons = new JPanel(); panneauBoutons.setLayout(new GridLayout(LIGNES_GRILLE, COLONNES_GRILLE)); this.boutonNouvellePartie = new JButton("Nouvelle Partie"); this.boutonReprendre = new JButton("Reprendre une partie"); this.boutonQuitter = new JButton("Quitter"); panneauBoutons.add(this.boutonNouvellePartie); ajouterBoutonReprendreSiSauvegarde(panneauBoutons); panneauBoutons.add(this.boutonQuitter); this.add(panneauBoutons, BorderLayout.CENTER); connecterControleur(); } /** * Tente de lire le fichier de sauvegarde. Si le fichier existe, * le bouton "Reprendre" est ajouté au panneau. Sinon, l'erreur est ignorée. * @param panneau le panneau graphique qui contiendra le bouton. */ private void ajouterBoutonReprendreSiSauvegarde(JPanel panneau) { try { FileInputStream testLecture = new FileInputStream("sauvegarde.dat"); testLecture.close(); panneau.add(this.boutonReprendre); } catch (Exception exception) { } } /** * Instancie le contrôleur et l'attache aux différents boutons. */ private void connecterControleur() { ControleurMenu controleur = new ControleurMenu(this); this.boutonNouvellePartie.addActionListener(controleur); this.boutonReprendre.addActionListener(controleur); this.boutonQuitter.addActionListener(controleur); } /** * Accède au bouton de nouvelle partie. * @return le bouton "Nouvelle Partie". */ public JButton getBoutonNouvellePartie() { return this.boutonNouvellePartie; } /** * Accède au bouton de reprise de partie. * @return le bouton "Reprendre une partie". */ public JButton getBoutonReprendre() { return this.boutonReprendre; } /** * Accède au bouton pour quitter le jeu. * @return le bouton "Quitter". */ public JButton getBoutonQuitter() { return this.boutonQuitter; } /** * Point d'entrée principal du programme. * @param arguments les arguments passés en ligne de commande. */ public static void main(String[] arguments) { MenuPrincipal menu = new MenuPrincipal(); menu.setVisible(true); } }