Tutoriel 4: gestion d’événements usager #
Créer les événements Ntro
#
-
En Eclipse, créer le paquet
pong.frontal.evenements
-
Dans le paquet
evenements
, créer les classesEvtAfficherFileAttente
EvtAfficherPartie
-
NOTE: la classe est nommée
EvtNomEvenement
par convention -
Ajuster les signatures de ces classes, qui doivent hériter de
ca.ntro.app.Event
public class EvtAfficherFileAttente extends Event { }
public class EvtAfficherPartie extends Event { }
-
Avec Ctrl+.Eclipse: Ctrl+1, ajouter les
import
- ATTENTION importer
ca.ntro.app.Event
- ATTENTION importer
-
S’assurer d’avoir l’arborescence suivante
Déclarer les événements Ntro
dans le Frontal
#
-
Déclarer les événements
Ntro
dans le Frontal@Override public void registerEvents(EventRegistrar registrar) { registrar.registerEvent(EvtAfficherFileAttente.class); registrar.registerEvent(EvtAfficherPartie.class); }
Récupérer les contrôles des Vues JavaFx #
-
S’assurer d’avoir l’attribut
fx:id
sur chaque bouton:-
dans
file_attente.xml
<Button fx:id="boutonDebuterPartie" text="%debuterPartie" styleClass="gros-bouton" id="bouton-debuter-partie"> </Button>
-
dans
partie.xml
<Button fx:id="boutonQuitterPartie" text="%quitterPartie" styleClass="gros-bouton" id="bouton-quitter-partie"> </Button>
-
-
NOTE: le
fx:id
etid
ne jouent pas le même rôlefx:id
identifiant JavaFxid
identifiant CSS
-
Les classes
VueFileAttente
etVuePartie
, ajouter un attribut pour le boutonATTENTION ci-bas il faut importerjavafx.scene.control.Button
-
dans
VueFileAttente
public class VueFileAttente extends ViewFx { @FXML private Button boutonDebuterPartie; @Override public void initialize() { Ntro.assertNotNull(boutonDebuterPartie); } }
-
dans
VuePartie
public class VuePartie extends ViewFx { @FXML private Button boutonQuitterPartie; @Override public void initialize() { Ntro.assertNotNull(boutonQuitterPartie); } }
-
-
S’assurer que:
- le nom de l’attribut correspond exactement au
fx:id
du fichier.xml
- l’annotation
@FXML
est directement au dessus de l’attribut - utiliser une ligne
Ntro.assertNotNull
pour détecter rapidement une erreur
- le nom de l’attribut correspond exactement au
Créer les capteurs d’événements JavaFx #
-
Dans les classes
VueFileAttente
etVuePartie
, capter les événements JavaFx-
dans
VueFileAttente
public class VueFileAttente extends ViewFx { @Override public void initialize() { // ... installerEvtAfficherPartie(); } private void installerEvtAfficherPartie() { boutonDebuterPartie.setOnAction(evtFx -> { Ntro.logger().info("[VueFileAttente] clic:" + evtFx.getEventType()); }); } }
-
dans
VuePartie
public class VuePartie extends ViewFx { @Override public void initialize() { // ... installerEvtAfficherFileAttente(); } private void installerEvtAfficherFileAttente() { boutonQuitterPartie.setOnAction(evtFx -> { Ntro.logger().info("[VuePartie] clic: " + evtFx.getEventType()); }); } }
-
-
Exécuter
pong
et je s’assurer que le capteur fonctionne$ sh gradlew pong # Dois afficher quand je cliques sur le bouton [INFO] [VueFileAttente] clic: ACTION [INFO] [VueFileAttente] clic: ACTION [INFO] [VueFileAttente] clic: ACTION
Créer et déclencher les événements Ntro
#
-
Dans les classes
VueFileAttente
etVuePartie
, ajouter-
dans
VueFileAttente
private void installerEvtAfficherPartie() { boutonDebuterPartie.setOnAction(evtFx -> { Ntro.newEvent(EvtAfficherPartie.class) .trigger(); }); }
-
dans
VuePartie
private void installerEvtAfficherFileAttente() { boutonQuitterPartie.setOnAction(evtFx -> { Ntro.newEvent(EvtAfficherFileAttente.class) .trigger(); }); }
-
-
Observer qu’on crée et déclenche l’événement Ntro en même temps