Files
SAE21_2025/MenuPrincipal.java
2026-04-12 16:40:07 +02:00

122 lines
4.0 KiB
Java

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);
}
}