ntro.ca

        • Contrats de classe
        • Liens utiles
        • Calendrier
        • Calendrier groupe 2
        • Calendrier groupes 1, 3
        • 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
        • Module 1.3: tableau d'objets
        • Examen 1
        • Module 2.1: données JSON
        • Module 2.2: données en Java
        • Module 2.3: récursivité
        • Examen 2
        • Module 3.1: structure générique
        • Module 3.2: efficacité (1)
        • Module 3.3: efficacité (2)
        • Examen 3
        • Module 4.1: liste naïve
        • Module 4.2: liste par tableau
        • Module 4.3: liste chaînée
        • Examen 4
        • Module 5.1: mappage naïf
        • Module 5.2: mappage par hachage
        • Module 5.3: mappage par arbre
        • Examen 5
        • Équipes
          • Horaire groupe 1
          • Horaire groupe 2
          • Horaire groupe 3
          • Groupe 1
          • Groupe 2
          • Groupe 3
        • Projets vedettes 2022
        • Projets vedettes 2023
        • Projets vedettes 2024
        • Projets vedettes 2025
        • Survol
        • Structure
        • Calendrier
        • Calendrier des séances
        • Évaluations
        • Exemples de jeu
        • Exemples de pages
        • 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 7: améliorer l'affichage
        • Module 8: jeu en 2d
        • Module 9: client/serveur
        • Module 10: plusieurs instances du même modèle
        • TP1
        • Examen 1
        • TP2
        • Examen 2
        • Projet de fin de session
        • Calendrier
        • Structure du cours
        • Évaluations
        • Contrat de classe
        • Le prof
        • 01: Windows et Word
          • Astuces et raccourcis
        • 02: Word
        • 03: Word
          • Exercice Word: insertion d'éléments spéciaux
          • Exercice Word: tableaux
        • 04: Word
          • Exercice Word: références
          • TP01: Word (15%)
        • 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
      • Jquery
      • Jquery Ui
      • Point de vue sur l'IA
    Tut3 2
    • Tutoriel 3.2: installer la VueFileAttente
      • Créer la classe VueFileAttente
      • Créer le fichier .fxml
      • Déclarer la Vue dans le Frontal
      • Créer la méthode VueRacine.afficherSousVue
      • Créer les tâches pour charger la Vue
      • Vérifier que la Vue s’affiche et vérifier le graphe des tâches

    Tutoriel 3.2: installer la VueFileAttente #

    Créer la classe VueFileAttente #

    1. Dans le paquet vues, créer la classe VueFileAttente

    2. Ajuster la signature de la classe, qui doit hériter de ViewFx

      public class VueFileAttente extends ViewFx {
      
    3. Avec Ctrl+.Eclipse: Ctrl+1, ajouter les import et la méthode obligatoire

      public class VueFileAttente extends ViewFx {
      
          @Override
          public void initialize() {
      
          }
      }
      
      • NOTES:
        • la méthode initialize est requise
        • on va s’en servir au module 4
    4. S’assurer d’avoir l’arborescence suivante

    Créer le fichier .fxml #

    1. Dans le répertoire pong/src/main/resources/vues, créer le fichier file_attente.fxml

    2. Pour commencer, ajouter le code suivant dans ce fichier:

      <?xml version="1.0" encoding="UTF-8"?>
      
      <?import javafx.scene.layout.*?>
      <?import javafx.scene.control.*?>
      <?import javafx.scene.image.*?>
      
      <VBox xmlns:fx="http://javafx.com/fxml"
          fx:controller="pong.frontal.vues.VueFileAttente">
      
          <ImageView>    
              <image>
                  <Image url="@/images/logo.png" />
              </image>
          </ImageView>
      
          <Button text="Débuter partie">
          </Button>
      
      </VBox>
      
      • NOTES:
        • l’attribut fx:controller déclare notre classe VueFileAttente
        • on a une image et un bouton dans un VBox:
          • l’image devrait être au dessus et le bouton en bas
    3. Télécharger logo.png et je copie le fichier dans pong/src/main/resources/images

    4. S’assurer d’avoir l’arborescence suivante

    Déclarer la Vue dans le Frontal #

    1. Ouvrir FrontalPong.java et déclarer la VueFileAttente

      public class FrontalPong implements FrontendFx {
      
          // ...
      
          @Override
          public void registerViews(ViewRegistrarFx registrar) {
      
              // ...
      
              registrar.registerView(VueFileAttente.class, "/vues/file_attente.fxml");
      
          }
      
          // ...
      }
      

    Créer la méthode VueRacine.afficherSousVue #

    1. Dans la VueRacine on a besoin d’une métode pour afficher une page (une sous-vue)

    2. Ouvrir VueRacine.java et ajouter cette méthode

      public class VueRacine extends ViewFx {
      
          // ...
      
      	public void afficherSousVue(ViewFx sousVue) {
      
      		Pane racineSousVue = sousVue.rootNode();
      
      		rootNode().getChildren().clear();
      		rootNode().getChildren().add(racineSousVue);
      	}
      
      	// ...
      
      }
      
      • NOTE:
        • on fait clear() pour retirer une page serait déjà affichée
        • le résultat est qu’on affiche une page à la fois
        • (à adapter selon vos besoins pour votre jeu)

    Créer les tâches pour charger la Vue #

    1. Dans CreerVues, ajouter la tâche suivante

      public class CreerVues {
      
          public static void creerTaches(FrontendTasks tasks) {
      
              tasks.taskGroup("CreerVues")
      
                   .waitsFor("ViewLoaders")
      
                   .contains(subTasks -> {
      
                      creerVueRacine(subTasks);
      
                      // ajouter
                      creerVueFileAttente(subTasks);
      
                   });
          }
      
          // ajouter
          private static void creerVueFileAttente(FrontendTasks subTasks) {
      
              subTasks.task(create(VueFileAttente.class))
      
                   .waitsFor(viewLoader(VueFileAttente.class))
      
                   .executesAndReturnsValue(inputs -> {
      
                       ViewLoader<VueFileAttente> viewLoader = inputs.get(viewLoader(VueFileAttente.class));
      
                       VueFileAttente vueFileAttente = viewLoader.createView();
      
                       return vueFileAttente;
                   });
          }
      
      • Utiliser Ctrl+.Eclipse: Ctrl+1 pour ajouter les import requis
    2. Dans PremierAffichage, ajouter les tâches suivantes

      public class PremierAffichage {
      
          public static void creerTaches(FrontendTasks tasks) {
      
              tasks.taskGroup("PremierAffichage")
      
                   .waitsFor("CreerVues")                    
      
                   .contains(subTasks -> {
      
                      installerVueRacine(subTasks);
      
                      afficherFenetre(subTasks);
      
                      // ajouter
                      choisirPremiereVue(subTasks);
      
                   });
          }
      
      
          // ajouter
          private static void choisirPremiereVue(FrontendTasks subTasks) {
      
              subTasks.task("choisirPremiereVue")
      
                    .waitsFor(created(VueRacine.class))
      
                    .waitsFor(created(VueFileAttente.class))
      
                    .executes(inputs -> {
      
                        VueRacine      vueRacine      = inputs.get(created(VueRacine.class));
                        VueFileAttente vueFileAttente = inputs.get(created(VueFileAttente.class));
      
                        vueRacine.afficherSousVue(vueFileAttente);
      
                    });
          }
      

    Vérifier que la Vue s’affiche et vérifier le graphe des tâches #

    1. Exécuter pong

      $ sh gradlew pong
      
    2. Vérifier que la VueFileAttente s’affiche

    3. Fermer la fenêtre Pong (pour générer le graphe des tâches)

    4. Vérifier le graphe des tâches pong/_storage/graphs/frontend.png

    Creative Commons License Creative Commons Attribution Creative Commons ShareAlike
    • Tutoriel 3.2: installer la VueFileAttente
      • Créer la classe VueFileAttente
      • Créer le fichier .fxml
      • Déclarer la Vue dans le Frontal
      • Créer la méthode VueRacine.afficherSousVue
      • Créer les tâches pour charger la Vue
      • Vérifier que la Vue s’affiche et vérifier le graphe des tâches