La liaison de données (databinding)

Propriété observable, liaison unidirectionnelle et bidirectionnelle, liaison calculée, convertisseur, liste observable, et l'interdiction d'écrire dans une propriété liée, avec les propriétés de JavaFX.

  • 25 cartes
  • 5 thèmes
  • Gratuit

Le programme, thème par thème

Le poids de chaque thème suit celui que lui donne l'examen.

  1. Notions
  2. Questions
  3. Ranger et relier
  4. Mises en situation
  5. Comprendre

Quelques cartes du deck

  • Propriété observable : de quoi s'agit-il ?

    Voir la réponse

    Valeur rangée dans un objet qui prévient ses écouteurs chaque fois qu'elle change, et qui peut être liée à une autre.

    En JavaFX, SimpleStringProperty en est une : un Label expose son texte par textProperty(), qu'on peut observer ou lier au lieu d'appeler setText.

  • Qu'affiche ce programme ?

    ```java
    StringProperty nom = new SimpleStringProperty("Ada");
    StringProperty copie = new SimpleStringProperty();
    copie.bind(nom);
    nom.set("Alan");
    System.out.println(copie.get());
    `

    • Alan
    • Ada
    • null
    • Rien : une exception est levée à la ligne 4
    Voir la réponse

    Alan

    Après bind, copie reprend la valeur de nom à chaque changement. Écrire dans nom, la source, est permis ; c'est écrire dans copie qui serait interdit.

  • On lie une propriété à une autre dans un seul sens avec la méthode …, et dans les deux sens avec ….

    Voir la réponse

    On lie une propriété à une autre dans un seul sens avec la méthode bind, et dans les deux sens avec bindBidirectional.

    Choisir le sens, c'est choisir qui a le droit d'écrire : dans bind, seule la source ; dans bindBidirectional, les deux côtés.

  • Liaison unidirectionnelle : de quoi s'agit-il ?

    Voir la réponse

    Lien par lequel une propriété cible reprend toujours la valeur de sa source, sans que le changement inverse soit possible.

    cible.bind(source) : modifier la source met la cible à jour, mais écrire dans la cible lève une exception tant que la liaison existe.

  • L'étiquette est liée à nom par bind, mais elle doit afficher « Inconnu » tant que nom est vide. Quelle réparation garde l'étiquette toujours synchronisée avec nom ?

    • Lier l'étiquette à Bindings.when(nom.isEmpty()).then("Inconnu").otherwise(nom)
    • Appeler unbind() avant chaque setText("Inconnu") quand nom est vide
    • Entourer le setText d'un try/catch pour ignorer l'exception
    • Remplacer bind par bindBidirectional pour pouvoir écrire dans l'étiquette elle-même
    Voir la réponse

    Lier l'étiquette à Bindings.when(nom.isEmpty()).then("Inconnu").otherwise(nom)

    La règle « vide donne Inconnu » s'exprime dans la liaison elle-même, qui se recalcule seule. unbind() casse la synchronisation ; le try/catch n'écrit rien ; bindBidirectional renverrait « Inconnu » dans nom.