Ce projet a été réalisé en deuxième année de BTS SIO avec la spécialité SLAM. L'objectif était de développer une application en Java pour la gestion d'une bibliothèque de jeux vidéo, en utilisant le pattern MVC (Modèle-Vue-Contrôleur).
Le projet visait à permettre la gestion des jeux vidéo, incluant la gestion des éditeurs, des catégories, des plateformes, et des consoles. Il comportait plusieurs fonctionnalités importantes, telles que :
Année scolaire 2024/2025
Le projet intègre plusieurs concepts avancés :
Plateforme
et la table Console
, qui permet de gérer les consoles comme une forme spécifique de plateforme.Biblio
et Jeu
illustre une double navigabilité, facilitant la gestion des jeux dans différentes bibliothèques.Le passage entre les différents panels de l'application est géré par un CardLayout
dans la classe FenetrePrimaire
. Cela permet de naviguer entre les sections telles que l'accueil, la gestion des jeux, et les différentes catégories. Voici un extrait de code qui montre cette gestion :
public class FenetrePrimaire extends JFrame {
private CardLayout cardLayout;
private JPanel mainPanel;
public FenetrePrimaire(Biblio biblio) {
// Configuration de la fenêtre principale
setTitle("SIO2Jeux - Gestion des Jeux");
setSize(800, 600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setLayout(new BorderLayout());
// Création du panneau principal avec CardLayout pour changer de vues
cardLayout = new CardLayout();
mainPanel = new JPanel(cardLayout);
// Ajout des panels au CardLayout
mainPanel.add(new PanelAccueil(), "Accueil");
mainPanel.add(new PanelJeu(new JeuControleur(biblio)), "Jeux");
add(mainPanel, BorderLayout.CENTER);
// Afficher le panel d'accueil par défaut
afficherPanel("Accueil");
}
private void afficherPanel(String nomPanel) {
cardLayout.show(mainPanel, nomPanel);
}
}
Cette approche m'a permis de gérer efficacement la navigation entre les différentes sections de l'application, bien que cela ait été un défi lors de la première implémentation.
Le PanelJeu
est une composante clé de la vue qui interagit avec le contrôleur pour gérer les jeux. Voici un extrait qui montre comment les actions (ajouter, modifier, supprimer) sont implémentées :
public class PanelJeu extends JPanel implements ActionListener {
private JTable tableJeux;
private JeuControleur jeuControleur;
public PanelJeu(JeuControleur jeuControleur) {
this.jeuControleur = jeuControleur;
setLayout(new BorderLayout());
// Configuration du modèle de table
String[] columnNames = {"ID", "Nom", "Prix", "Catégorie", "Éditeur", "Plateforme"};
tableJeux = new JTable(new DefaultTableModel(columnNames, 0));
add(new JScrollPane(tableJeux), BorderLayout.CENTER);
JButton btnAjouter = new JButton("Ajouter");
btnAjouter.addActionListener(this);
add(btnAjouter, BorderLayout.SOUTH);
}
@Override
public void actionPerformed(ActionEvent e) {
String nom = txtNomJeu.getText().trim();
double prix = Double.parseDouble(txtPrix.getText().trim());
jeuControleur.ajouterJeu(nom, prix, "FPS", "Ubisoft", "PS5");
chargerJeux();
}
}
Cette classe permet de manipuler la liste des jeux via le contrôleur, en suivant le pattern MVC.
La classe ModeleJeu
est responsable de la gestion des interactions avec la base de données. Voici un extrait montrant comment les données sont récupérées :
public static ArrayList getTousLesJeux() {
ArrayList jeux = new ArrayList<>();
try {
Connection connexion = Connexion.getConnexion();
String sql = "SELECT j.id, j.nom, j.prix, c.nom AS nomCategorie, e.nomEditeur AS nomEditeur, p.nom AS nomPlateforme " +
"FROM jeu j, categorie c, editeur e, plateforme p " +
"WHERE j.idCategorie = c.code " +
"AND j.idEditeur = e.idEditeur " +
"AND j.idPlateforme = p.id";
try (PreparedStatement preparedStatement = connexion.prepareStatement(sql);
ResultSet rs = preparedStatement.executeQuery()) {
while (rs.next()) {
Jeu jeu = new Jeu(rs.getInt("id"), rs.getString("nom"), rs.getDouble("prix"), -1, -1, -1);
jeu.setNomCategorie(rs.getString("nomCategorie"));
jeu.setNomEditeur(rs.getString("nomEditeur"));
jeu.setNomPlateforme(rs.getString("nomPlateforme"));
jeux.add(jeu);
}
}
} catch (SQLException e) {
System.out.println("Erreur lors de la récupération des jeux : " + e.getMessage());
}
return jeux;
}
Cette méthode montre comment récupérer les informations des jeux en utilisant JDBC et les relations entre les différentes tables.
Ce projet m'a permis de mettre en pratique les concepts de programmation orientée objet, y compris l'héritage et la double navigabilité, tout en développant une application complexe en Java. J'ai également renforcé mes compétences en test unitaire avec JUnit et en utilisation de fichiers XML pour la gestion des configurations et des données.
Pour l'avenir, plusieurs évolutions pourraient être envisagées :
Ce projet a représenté un véritable défi pour moi, car il s'agissait de ma première application en Java utilisant l'architecture MVC. J'ai particulièrement rencontré des difficultés avec l'enchaînement des panels et la gestion de la logique entre les différentes vues. Cela m'a permis d'acquérir de l'expérience précieuse et de mieux comprendre les bonnes pratiques pour structurer une application Java en utilisant le pattern MVC de manière efficace.