ntro.ca

        • Contrats de classe
        • Liens utiles
        • Calendrier
        • Calendrier groupe 3
        • Calendrier groupes 1, 2
        • Structure du cours
        • Évaluations
        • Matériel à se procurer
        • Les profs
          • Marc-Olivier Tremblay
          • Mathieu Bergeron
        • Module 1.1: installation + trier des cartes
        • Module 1.2: rappels POO
          • URL dépôt Git à remettre
        • Module 1.3: tableau d'objets
        • Examen 1
        • Validation des ateliers
        • Module 2.1: données JSON
        • Module 2.2: données en Java
        • Module 2.3: récursivité
        • Examen 2
        • Validation des ateliers
        • Module 3.1: structure générique
        • Module 3.2: efficacité (1)
        • Module 3.3: efficacité (2)
        • Examen 3
        • Validation des ateliers
        • Module 4.1: liste naïve
        • Module 4.2: liste par tableau
        • Module 4.3: liste chaînée
        • Examen 4
        • Validation des ateliers
        • Module 5.1: mappage naïf
        • Module 5.2: mappage par hachage
        • Module 5.3: mappage par arbre
        • Examen 5
        • Validation des ateliers
        • Travail de rattrapage
        • Projets vedettes
          • Contrat gr1
          • Contrat gr2
          • Contrat gr3
        • Survol
        • Structure
        • Calendrier semaines
          • Calendrier gr1
          • Calendrier gr2
          • Calendrier gr3
        • Utilisation IA
        • Évaluations
        • Exemples de pages
        • Exemples de jeu
        • Jeux choisis
        • Réponses à vos questions
        • Module 1: créer le projet
        • Module 2: concevoir l'application
        • Module 3: vues NtroFx
        • Module 4: modèle et navigation
        • Module 5: ajouter le dorsal, modifier le modèle
        • Module 6: améliorer l'affichage
        • Module 7: jeu en 2d
        • Guide de style 4F5
        • TP1
        • Examen 1
        • Examen 2
        • Calendrier
        • Évaluations
        • Structure du cours
        • Contrat de classe
        • Le prof
        • 01: Windows et Word
          • Astuces et raccourcis
        • 02: Word
          • Exercice Word: insertion d'éléments spéciaux
          • Exercice Word: tableaux
        • 03: Word
          • Exercice Word: références
          • TP01: Word (15%)
        • 04: Word
        • 05: PowerPoint
          • TP02: PowerPoint (10%)
        • 06: Examen Word (20%)
        • 07: Excel
        • 08: Excel
        • 09: Excel
          • TP03: Excel (15%)
        • 10: Excel
        • 11: Examen Excel (20%)
        • 12: Access
        • 13: Access
        • 14: Access
        • 15: Examen Access
      • Sondage H2023 (dept. info)
      • Vision H2023 (dept. info)
      • P1) exercices interactifs de lecture
      • P2) transition Excel vers Python
        • Atelier 2: un exemple
      • Index
      • Point de vue sur l'IA
    Tutoriel 6: analyse
    • Tutoriel 6: analyse
      • Comparer le comportement de dep05 et dep06
      • Comparer les graphes de tâches de dep05 et dep06
      • Comparer les fichiers dep05 et dep06
        • Nouveaux fichiers dans dep06
        • Fichiers différents
      • « Tracer » les étapes pour afficher une valeur

    Tutoriel 6: analyse #

    Comparer le comportement de dep05 et dep06 #

    dep05

    dep06

    $ sh gradlew dep05

    $ sh gradlew dep06

    • Navigation entre deux vues
    • Afficher un modèle en mode texte
    • Ajouter une valeur au modèle

    même chose mais:

    • Afficher le modèle en mode graphique
      • Un Label pour chaque attribut
      • Un fragment pour chaque valeur

    Comparer les graphes de tâches de dep05 et dep06 #

    Frontal

    dep05/_storage/graphs/frontend.png

    dep06/_storage/graphs/frontend.png

    • On ajoute la tâche viewLoader[FragmentA] pour créer le viewLoader des fragments

    Dorsal

    dep05

    dep05/_storage/graphs/backend.png

    dep06

    dep05/_storage/graphs/backend.png

    • C’est le même Dorsal (pas de nouvelle fonctionnalité)

    Comparer les fichiers dep05 et dep06 #

    • Comparer les répertoires dep05/src et dep06/src avec VSCode:

    Nouveaux fichiers dans dep06 #

    FragmentA

    La classe Fragment

    • fonctionne comme une Vue, sauf que typiquement

      • la Vue sert de page (on affiche une seule Vue à la fois)
      • sur la même Vue: on a plusieurs fragments, chacun affichant une valeur

    fragment_a.xml

    Le FXML du fragment

    • fonctionne comme le FXML d’une Vue

    Fichiers différents #

    ModeleA

    • Le Modèle s’affiche sur la Vue
      • (typiquement en itérant chaque valeur)

    ValeurA

    • Chaque Valeur s’affiche sur un Fragment
      • (créé dynamiquement pour cette valeur)

    TachesA

    Dans la tâche qui crée la VueA, on va sauvegarder un viewLoader capable de crée des fragments dynaniquement

    VueA

    La VueA doit maintenant:

    • Créer un fragment dynamiquement quand on veut afficher une valeur
    • Ajouter les fragments à un conteneur

    FrontalDepart

    Pour déclarer le fragment (sa classe FragmentA, son FXML fragment_a.fxml)

    dev.css

    Les espacements ont maintenant tailles maximales (-fx-max-height, -fx-max-width), ce qui permet de contrôler l’amplitude des tailles élastiques

    vue_a.fxml

    La VueA doit maintenant avoir un conteneur où placer les fragments

    « Tracer » les étapes pour afficher une valeur #

      Étape Détails
    1

    La VueA est créée

    • Dans la tâche create(VueA.class), on récupère maintenant un ViewLoader pour le FragmentA

    • Le ViewLoader est mémorisé dans la VueA:

    • Plus tard (au moment d’afficher la valeur), le ViewLoader va servir à créer une nouvelle instance du fragment pour chaque valeur qu’il faut afficher

    ... le .json est modifié et/ou une tâche du Dorsal s'exécute ...
    2

    La tacheD1 s’exécute

    • La tacheD1 récupére la VueA et la dernière version du modèle

      private static void tacheD1(FrontendTasks tasks) {
      
          tasks.task("tacheD1")
      
               .waitsFor(modified(ModeleA.class))
      
               .waitsFor(created(VueA.class))
      
               .executes(inputs -> {
      
                   var objA = inputs.get(created(VueA.class));
                   var objB = inputs.get(modified(ModeleA.class));
      
                   objB.currentValue().methodeC(objA);
      
               });
      } 
      
    • Naviguer vers la methodeC avec Ctrl+clic

    3

    ModeleA.methodeC s’exécute

    • Plutôt qu’afficher en mode texte, on va appeler plusieurs méthodes de la Vue pour afficher en mode graphique:

      public void methodeC(VueA vueA) {
      
          vueA.methodC(attrA);
      
          vueA.methodD(attrB);
      
          vueA.methodeE();
          for(ValeurA valeur : valeurs) {
              vueA.methodeF(valeur);
          }
      } 
      
    • En particulier, on va itérer chaque valeur et demander à la vue de l’afficher:

      for(ValeurA valeur : valeurs) {
          vueA.methodeF(valeur);
      } 
      
    • Naviguer vers la methodeF avec Ctrl+clic

    4

    VueA.methodeF s’exécute

    • Avec le ViewLoader mémorisé à l’étape 1, la Vue va créer un fragment pour la valeur

      public void methodeF(ValeurA paramC) {
          FragmentA varA = viewLoader.createView();
      
          paramC.methodeA(varA);
      
          conteneurA.getChildren().add(varA.rootNode());
      } 
      
    • La Vue demande ensuite à la valeur de s’afficher sur le fragment

    • Finalement, le fragment est ajouté à un conteneur

    • Naviguer vers la methodeA avec Ctrl+clic

    5

    ValeurA.methodeA s’exécute

    • La valeur s’affiche sur un fragment:

      public void methodeA(FragmentA paramA) {
          paramA.methodeA(attrA);
          paramA.methodeB(attrB);
      } 
      
    • La valeur appelle des méthodes du fragment pour afficher chaque attribut

    Creative Commons License Creative Commons Attribution Creative Commons ShareAlike
    • Tutoriel 6: analyse
      • Comparer le comportement de dep05 et dep06
      • Comparer les graphes de tâches de dep05 et dep06
      • Comparer les fichiers dep05 et dep06
        • Nouveaux fichiers dans dep06
        • Fichiers différents
      • « Tracer » les étapes pour afficher une valeur