La boucle d'événements et les écouteurs

Comment une interface graphique réagit : les événements arrivent dans une file, une boucle les distribue un par un sur le fil de l'interface, les écouteurs enregistrés sur la source s'exécutent, l'événement se propage, et un traitement long gèle tout.

  • 26 cartes
  • 3 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

Quelques cartes du deck

  • Événement : de quoi s'agit-il ?

    Voir la réponse

    Fait survenu dans l'application, déclenché par l'utilisateur ou le système : clic, frappe de touche, fermeture de fenêtre, fin d'un minuteur.

    En programmation événementielle, le programme n'appelle plus la suite lui-même : il attend qu'un événement arrive et réagit. L'objet événement porte sa source et son type.

  • Le bouton est un enfant du panneau, et on clique sur le bouton. Dans quel ordre le journal s'écrit-il ?

    ```javascript
    panneau.addEventListener('click', () => journal.push('C'));
    bouton.addEventListener('click', () => journal.push('A'));
    bouton.addEventListener('click', () => journal.push('B'));
    `

    • A, B, C
    • C, A, B
    • A, C, B
    • B, A, C
    Voir la réponse

    A, B, C

    Les écouteurs d'une même source s'exécutent dans l'ordre où on les a ajoutés (A puis B). Puis l'événement remonte au parent, dont l'écouteur C passe en dernier, même s'il a été enregistré en premier.

  • L'objet événement transmis à l'écouteur indique son type et sa …, c'est-à-dire le composant sur lequel l'événement s'est produit.

    Voir la réponse

    L'objet événement transmis à l'écouteur indique son type et sa source, c'est-à-dire le composant sur lequel l'événement s'est produit.

    Un même écouteur peut servir à plusieurs boutons : getSource() en JavaFX ou event.target en JavaScript dit lequel a réagi.

  • Écouteur : de quoi s'agit-il ?

    Voir la réponse

    Code qu'on enregistre auprès d'un composant pour qu'il soit appelé quand un événement d'un type donné se produit sur lui.

    On ne l'appelle jamais soi-même : on le branche (setOnAction, addEventListener) et c'est la boucle qui l'exécute. On dit aussi gestionnaire d'événement.

  • Cette fois, l'écouteur A appelle event.stopPropagation(). Que contient le journal après le clic sur le bouton, enfant du panneau ?

    ```javascript
    panneau.addEventListener('click', () => journal.push('C'));
    bouton.addEventListener('click', (event) => {
    journal.push('A');
    event.stopPropagation();
    });
    bouton.addEventListener('click', () => journal.push('B'));
    `

    • A
    • A, B
    • A, B, C
    • C
    Voir la réponse

    A, B

    stopPropagation() empêche l'événement de remonter au parent, donc C n'est pas exécuté. Les autres écouteurs du même bouton, eux, s'exécutent quand même : seul stopImmediatePropagation() les arrêterait.