JavaFX et sauvegarde Partie 2
2eme Didacticiel sur la persistance
🎥 La vidéo arrive! Juste le temps de la faire 🎥
maj: 21/03/2020
Prérequis: avoir suivi la première partie JavaFX et sauvegarde Partie 1
Comme promis, nous allons d’abord utiliser JSON.simple. Le but ici est uniquement de vous montrer comment sauvegarder quelques information sur notre application, dans la prochaine partie nous les importerons.
Importons Json.simple
Il faut tout d’abord importer la bibliothèque. Dans le pom fait un ajout de dépendance, soit avec clique droit sur <dependencies>
et Generate… ou avec le raccourcit clavier puis Depedency.
Vous choisirez json.simple.
Dans le pom.xml
ça nous ajoute
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1.1</version>
</dependency>
Mise en place
Dans notre contrôleur nous avons déjà une méthode sauvHandler()
que nous allons utiliser pour la sauvegarde.
Je vais sauvegarder bêtement les noms des champs et le label de titre.
Commencez par nommer les label:
- le label nom:
champNom
- le label prenom:
champPrenom
- le label titre:
champTitre
- le label âge:
champAge
et déclarez les dans le contrôleur
Utilisation de JSON.simple
Dans la méthode, créons notre objet json:
@FXML
private void sauvHandler(ActionEvent event) {
JSONObject sauvegarde = new JSONObject();
sauvegarde.put("titre", champTitre.getText());
sauvegarde.put("champNom",champNom.getText());
sauvegarde.put("champPrenom",champPrenom.getText());
sauvegarde.put("champAge",champAge.getText());
}
Modification de App pour afficher la fenêtre de sauvegarde
Afin d’afficher un popup de sauvegarde nous devons rendre accessible le stage à partir du contrôleur.
Faites la modification suivante dans App.java
:
public static void main(String[] args) {
launch(args);
}
// Déclaration du stage
private static Stage stage;
// getter qui rend accessible notre stage
public static Stage getStage() {
return stage;
}
@Override
public void start(Stage primaryStage) {
// Récupération du stage
App.stage = primaryStage;
Écriture du Json dans un fichier
Nous allons maintenant laisser l’utilisateur dire où il va faire sa sauvegarde.
Utilisons FileChooser
et sa fenêtre popup à la suite dans notre méthode sauvHandler
// Déclaration du FileChoser
FileChooser fileChooser = new FileChooser();
// Ajout d'un filtre d'extention
FileChooser.ExtensionFilter extensionFilter = new FileChooser.ExtensionFilter("Json file (*.json", "*.json");
fileChooser.getExtensionFilters().add(extensionFilter);
Affichage du popup
File file = fileChooser.showSaveDialog(App.getStage());
Si le fichier est bien choisi ou nommé par l’utilisateur nous l’écrivons grace à un FileWriter
.
if (file != null) {
//Si l'extension n'est pas bien renseignée on l'ajoute
if (!file.getPath().endsWith(".json")) file = new File(file.getPath() + ".json");
//On écrit le fichier avec un try..catch en cas d'erreur
try (FileWriter fichier = new FileWriter(file)) {
fichier.write(sauvegarde.toJSONString());
fichier.flush();
}catch (IOException e){
//On affiche l'erreur en console
System.out.println(e.getMessage());
}
}
Testons tout ça
Lancez note appli et cliquez sur sauver puis choisissez un emplacement de sauvegarde et validez.
Vous devriez obtenir un fichier dont le contenu est:
{"champPrenom":"Prénom","titre":"Mon appli d'Exemple","champAge":"âge","champNom":"Nom"}
Voilà nous savons sauver des données.
Dans la prochaine partie nous verrons comment les charger.