Rapport de Projet : Application JavaFX de Gestion de Tâches
Présenté par : JIHANE BOUDARRAJA Encadré par : Pr. Soufiane Hamida
Juin 2025
1. Introduction
Ce rapport détaille la conception et l'implémentation d'une application de gestion de tâches
simple, développée en Java à l'aide du framework JavaFX. L'objectif principal de ce projet
était de mettre en œuvre les compétences acquises durant le module, notamment la
création d'une interface graphique interactive, la connexion et l'interaction avec une base de
données, et l'adoption d'une architecture logicielle propre et bien organisée, incluant les
opérations CRUD (Create, Read, Update, Delete). Le projet suit le pattern architectural MVC
(Model-View-Controller) complété par le pattern DAO pour l'accès aux données,
garantissant une bonne séparation des préoccupations.
2. Architecture du Projet (MVC)
L'application est structurée selon le pattern architectural Model-View-Controller (MVC), qui
favorise la séparation des responsabilités et facilite la maintenance.
● Modèle (Model) : Représente les données de l'application et la logique métier. La
classe Task.java est le modèle principal qui définit la structure d'une tâche (ID,
titre, description, date limite, statut).
● Vue (View) : Est responsable de l'affichage de l'interface utilisateur. Le fichier
main.fxml décrit la mise en page visuelle de l'application sans contenir de logique
métier.
● Contrôleur (Controller) : (DashboardController.java) Agit comme un
intermédiaire entre le Modèle et la Vue. Il gère les événements utilisateur (clics de
bouton, saisies), met à jour le Modèle en fonction de ces actions, et rafraîchit la Vue
pour refléter les changements.
● DAO (Data Access Object) : Ce pattern est utilisé pour encapsuler toute la logique
d'accès à la base de données. L'interface TaskDAO.java définit le contrat des
opérations CRUD, et TaskDAOImpl.java fournit l'implémentation concrète de ces
opérations. Cela assure une abstraction de la couche de persistance.
3. Conception et Implémentation de la Base de Données
Pour la persistance des données, le projet utilise une base de données SQLite, reconnue
pour sa légèreté et sa facilité d'intégration dans les applications Java.
● Connexion à la Base de Données (DBConnection.java) : La classe
DBConnection.java est une classe utilitaire qui gère la connexion à la base de
données. Elle fournit une méthode statique getConnection() pour établir une
connexion JDBC à la base de données taskmanager.db. La méthode
initializeDatabase() est appelée au démarrage de l'application pour s'assurer
que la table tasks est créée si elle n'existe pas, simplifiant ainsi le déploiement.
Schéma de la Base de Données (table tasks) : La base de données contient une unique
table nommée tasks, qui stocke les informations relatives à chaque tâche. Voici le script
SQL de création de la table :
SQL
CREATE TABLE IF NOT EXISTS tasks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title VARCHAR(100) NOT NULL,
description TEXT,
deadline DATE,
status VARCHAR(20) NOT NULL
);
●
○ id : Entier, clé primaire auto-incrémentée, identifiant unique de la tâche.
○ title : Chaîne de caractères (VARCHAR), titre de la tâche, non nul.
○ description : Texte (TEXT), description détaillée de la tâche.
○ deadline : Date (DATE), date limite pour l'achèvement de la tâche.
○ status : Chaîne de caractères (VARCHAR), statut actuel de la tâche (ex:
"To Do", "In Progress", "Done"), non nul.
● Implémentation du Pattern DAO (TaskDAO.java, TaskDAOImpl.java) :
L'interface TaskDAO définit les opérations CRUD (addTask, getTaskById,
getAllTasks, updateTask, deleteTask). La classe TaskDAOImpl implémente
cette interface en utilisant JDBC PreparedStatement pour des interactions
sécurisées et efficaces avec la base de données. Chaque méthode gère les
SQLException pour une robustesse accrue.
4. Conception de l'Interface Utilisateur (GUI)
L'interface graphique de l'application est développée avec JavaFX et est définie dans le
fichier FXML main.fxml. Scene Builder a été utilisé pour la conception visuelle, permettant
une séparation claire entre la mise en page de l'interface et la logique applicative.
L'interface comprend les éléments suivants :
● Un TableView (taskTableView) qui affiche la liste des tâches avec des colonnes
pour l'ID, le titre, la description, la date limite et le statut.
● Des champs de saisie pour les détails de la tâche : un TextField (titleField)
pour le titre, un TextArea (descriptionArea) pour la description, un
DatePicker (deadlinePicker) pour la date limite, et un ComboBox
(statusComboBox) pour le statut.
● Des boutons d'action : "Add Task" (addTaskButton), "Update Task"
(updateTaskButton), "Delete Task" (deleteTaskButton), et "Clear"
(clearFieldsButton).
5. Logique Applicative (Contrôleur)
Le DashboardController.java est la pierre angulaire de la logique applicative. Il est lié
au main.fxml via l'attribut fx:controller.
● Injections @FXML : Tous les composants d'interface utilisateur définis dans
main.fxml sont injectés dans le contrôleur à l'aide de l'annotation @FXML.
● Méthode initialize() : Cette méthode est automatiquement appelée après le
chargement du FXML. Elle configure le TableView en liant les colonnes aux
propriétés du modèle Task via PropertyValueFactory, initialise la ComboBox
des statuts, charge toutes les tâches existantes de la base de données, et met en
place les écouteurs d'événements pour les boutons et la sélection du tableau.
● Gestionnaires CRUD : Les méthodes handleAddTask(),
handleUpdateTask(), et handleDeleteTask() sont appelées lors des clics sur
les boutons correspondants. Elles récupèrent les données des champs de saisie,
effectuent des validations de base, appellent les méthodes DAO appropriées pour
interagir avec la base de données, puis rafraîchissent le TableView et affichent des
alertes à l'utilisateur.
6. Fonctionnalités Principales (Opérations CRUD)
L'application implémente toutes les opérations CRUD requises pour la gestion des tâches :
● Créer (Ajouter une tâche) : L'utilisateur remplit les champs de saisie et clique sur
"Add Task". Une nouvelle tâche est alors insérée dans la base de données et
ajoutée à la liste affichée.
● Lire (Afficher les tâches) : Au démarrage de l'application, toutes les tâches sont
chargées de la base de données et affichées dans le TableView. La sélection d'une
tâche dans le tableau affiche ses détails dans les champs de saisie.
● Mettre à jour (Modifier une tâche) : Après avoir sélectionné une tâche dans le
TableView, l'utilisateur peut modifier ses détails dans les champs de saisie et
cliquer sur "Update Task" pour enregistrer les modifications dans la base de
données.
● Supprimer (Supprimer une tâche) : L'utilisateur sélectionne une tâche dans le
TableView et clique sur "Delete Task". Une boîte de dialogue de confirmation est
affichée avant la suppression définitive de la tâche de la base de données.
7. Qualité et Organisation du Code
Le projet a été développé en mettant l'accent sur la qualité et l'organisation du code :
● Architecture propre : L'adhésion aux patterns MVC et DAO assure une bonne
séparation des préoccupations et une maintenance facilitée.
● Modularité : Chaque composant (Modèle, Vue, Contrôleur, DAO) a une
responsabilité unique et bien définie.
● Commentaires : Le code est documenté avec des commentaires pour améliorer sa
lisibilité et sa compréhension.
● Classe Principale (Main.java) : La classe Main.java est le point d'entrée de
l'application. Elle initialise la base de données
(DBConnection.initializeDatabase()) et charge le fichier main.fxml pour
démarrer l'interface graphique.
8. Conclusion
Ce projet a permis de développer une application JavaFX de gestion de tâches complète,
intégrant une base de données SQLite et respectant une architecture MVC et DAO. Toutes
les opérations CRUD sont fonctionnelles, offrant une solution robuste et bien structurée pour
la gestion des tâches. Les défis rencontrés, notamment la liaison entre FXML et le
contrôleur, ainsi que l'intégration JDBC, ont été surmontés avec succès, consolidant ainsi
les compétences en développement d'applications Java.
Annexes : Captures d'écran