13 31 Charger et enregistrer les TodoItems
Revenons sur quelques détails utilisés dans la classe TodoData. Nous instancions la liste avec FXCollections.observableArrayList car la ListView de JavaFX attend une ObservableList via sa méthode setAll. Le package FXCollections fournit ce type adapté. Ensuite, nous récupérons le chemin du fichier et instancions un BufferedReader pour le lire. Maintenant que le Singleton existe, voyons comment la classe Main et le Controller y accèdent.
Override start, stop et init
Dans la classe Main, nous overridons la méthode stop via Alt + Insert. Cette méthode s'exécute quand l'utilisateur ferme la fenêtre principale. Nous y appelons un bloc try/catch : dans le try, nous récupérons l'instance avec TodoData.getInstance() puis nous appelons storeTodoItems(). Le catch loggue un message en cas d'erreur. Cela permet de sauvegarder les TodoItems au moment de la fermeture de l'application.
Pour amorcer le fichier, nous appelons temporairement TodoData.getInstance().setTodoItems(...) à la fin de la méthode initialize() du Controller, juste après les éléments codés en dur. À la première exécution puis fermeture, la méthode stop écrit les données dans TodoListItems.txt à la racine du projet IntelliJ. On vérifie que le fichier contient bien les enregistrements séparés par des tabulations.
Désormais, nous voulons charger ces données automatiquement au démarrage plutôt que de les coder en dur. Nous overridons donc la méthode init dans Main, qui s'exécute avant start. Le même pattern try/catch est utilisé, mais en appelant cette fois loadTodoItems() sur l'instance. JavaFX appelle automatiquement init() au lancement et remplit ainsi la liste à partir du fichier. La prochaine vidéo finalisera l'intégration.
En résumé
Cette leçon montre comment implémenter la persistence des données TodoItems en utilisant le pattern singleton et les fichiers texte. Vous apprendrez à utiliser `ObservableList` de JavaFX pour gérer une collection de tâches, à enregistrer les données lors de la fermeture de l'application (via la méthode `stop()`), et à les charger automatiquement au démarrage (via la méthode `init()`). L'approche combine un singleton `TodoData` avec un système try-catch pour gérer les erreurs de fichier lors du chargement et de l'enregistrement.
Points clés
- ObservableList avec FXCollections : Utiliser FXCollections.observableArrayList() pour créer une collection observable compatible avec les vues JavaFX (ListView)
- Pattern Singleton : Accéder aux données via TodoData.getInstance() pour centraliser la gestion des tâches à faire
- Enregistrement lors de la fermeture : Overrider la méthode stop() dans la classe principale pour invoquer storeTodoItems() quand l'utilisateur quitte l'application
- Chargement au démarrage : Overrider la méthode init() pour appeler loadTodoItems() automatiquement par JavaFX lors du lancement
- Gestion des erreurs : Envelopper le code de sauvegarde/chargement dans des blocs try-catch pour capturer les exceptions fichier
- Fichiers texte : Les données sont stockées dans un fichier texte à la racine du projet, avec les éléments séparés par des espaces
Questions fréquentes
Pourquoi utiliser ObservableList au lieu d'une ArrayList classique ?
ObservableList est requise par JavaFX pour lier les données à une ListView. Quand la liste change, la vue se met à jour automatiquement. FXCollections permet de convertir des données standard en ObservableList.
À quel moment exactement les données sont-elles sauvegardées ?
Les données sont enregistrées quand l'utilisateur ferme l'application, via la méthode stop() surchargée dans la classe principale. Cette méthode est appelée automatiquement par JavaFX lors de la fermeture de la fenêtre.
Comment le fichier de données est-il créé initialement ?
Le fichier est créé lors de la première exécution du programme, dans la méthode initialize() du contrôleur avec un appel temporaire à storeTodoItems(). Ensuite, il est mis à jour à chaque fermeture de l'application via la méthode stop().