Copy of https://perso.isima.fr/loic/java/exo_jse_base_houzehou_javafx.php
tete du loic

 Loïc YON [KIUX]

  • Enseignant-chercheur
  • Référent Formation Continue
  • Responsable des contrats pros ingénieur
  • Référent entrepreneuriat
  • Responsable de la filière F2 ingénieur
  • Secouriste Sauveteur du Travail
mail
loic.yon@isima.fr
phone
(+33 / 0) 4 73 40 50 42
location_on
Institut d'informatique ISIMA
  • twitter
  • linkedin
  • viadeo

[JavaSE] Houzehou

 Cette page commence à dater. Son contenu n'est peut-être plus à jour. Contactez-moi si c'est le cas!

Date de première publication : 2018/01/29

Notions : Définition de classes, Manipulations de chaines et de fichiers, JavaFX, conteneurs

Nous allons créer un annuaire non exhaustif des personnes ayant créé un langage de programmation.

exemple de resultat

Mise en place de quelques classes

Java 8 introduit un nouveau package java.time qui définit une classe Year...

Si vous choisissez l'appel de constructeur à partir d'un autre constructeur, vous devez choisir quel constructeur appelle l'autre. Pour moi, il est plus logique que le constructeur avec moins d'arguments appelle le constructeur qui initialise tous les paramètres - ce dernier peut être private si nécessaire.

La méthode toString() est héritée d’Object. Son comportement par défaut est de donner le nom de la classe et l'adresse mémoire un code de hachage de l’instance concernée.

Si vous codez une concaténation de String, "a"+"b", le compilateur transforme automatiquement avec un StringBuilder MAIS cela reste une bonne idée de le faire et de savoir faire car dans d'autres situations, le compilateur ne saura pas optimiser.

Gestion de fichiers et de plusieurs instances d’une même classe

Manipulation d'un fichier texte

On peut par exemple chaîner des objets de type File, FileOutputStream puis PrintStream.

Il faut également gérer les exceptions possibles avec double bloc try/catch ou un try-with-resources si vous le pouvez.

try(R1 r1 = new R1(); R2 r2 = new R2()) {
  // code utilisant les ressources
} // fermeture automatique des ressources
catch (Exception e) {
  
}

On va maintenant s’intéresser à la lecture de ce fichier par une classe Whoswho, un conteneur d’instances de Personne.

Cela ne crée pas d’instance car c’est un tableau de références. Créer un tableau d’objets en C++ crée autant d’objets que nécessaire en faisant appel au constructeur par défaut de la classe.

Sérialisation

L'étape la plus délicate pour la "sérialisation" XML est l'ajout de la bilbilothèque spécifique (sous forme de fichier jar) lors des étapes de compilation/exécutation que ce soit à la main ou dans l'EDI. La méthode est décrite dans la FAQ Eclipse.

Pour la compilation ou l'exécution à la main, il faut "inclure" le fichier jar dans la liste des classes disponibles :


javac -cp xstream.jar:. Classe.java

Voilà le code d'écriture pour une version récente de la bibliothèque :

FileOutputStream   fos     = null;
XStream            xstream = null;

fos = new FileOutputStream(name);
xstream = new XStream(new StaxDriver());
xstream.toXML(objects, fos);  

Interface graphique JavaFX

On veut maintenant afficher la classe Whoswho dans un composant JavaFX comme une TableView.


colonne.setCellValueFactory(
    new PropertyValueFactory<Person,String>("nom")
);

Pour compléter, n’hésitez pas à jeter un coup d’œil au tutoriel dédié Oracle.