Théorie: réagir aux événements usager #
Identifier les contrôles en FXML #
-
Dans le
.xml
, on doit identifier chaque contrôle avec un attributfx:id
<Button fx:id="boutonDebuterPartie" text="%debuterPartie" styleClass="gros-bouton" id="bouton-debuter-partie"> </Button>
-
Le
fx:id
etid
ne joue pas le même rôlefx:id
identifiant JavaFxid
identifiant CSS
Récupérer un contrôle dans une Vue #
(oubli: le type de l'attribut doit être la même classe que la balise)
-
Pour accéder au contrôle en Java, on ajoute un attribut dans notre Vue
public class VueFileAttente extends ViewFx { @FXML private Button boutonDebuterPartie; // méthode appelée après la création de la vue @Override public void initialize() { // vérifier rapidement que boutonDebuterPartie est bien récupéré Ntro.assertNotNull(boutonDebuterPartie); } }
-
Le nom de l’attribut doit correspondre exactement au
fx:id
du fichier.xml
-
Le type de l’attribut doit être la même classe que la balise dans le fichier
.xml
-
L’annotation
@FXML
doit être directement au dessus de l’attribut -
La ligne
Ntro.assertNotNull
est utile pour détecter rapidement les erreurs
Installer un capteur d’événement en JavaFx #
-
Voici comment capter un événement JavaFx
public class VueFileAttente extends ViewFx { @FXML private Button boutonDebuterPartie; @Override public void initialize() { Ntro.assertNotNull(boutonDebuterPartie); installerEvtAfficherPartie(); } private void installerEvtAfficherPartie() { boutonDebuterPartie.setOnAction(evtFx -> { System.out.println("clic: " + evtFx.getEventType()); }); } }
-
quand l’usager clique, on devrait avoir l’affichage suivant à la console
clic: ACTION clic: ACTION clic: ACTION
-
Créer et déclencher un événement en Ntro
#
-
Il faut créer une classe qui hérite de
EventNtro
, p.ex.public class EvtAfficherFileAttente extends Event { }
- NOTE: par convention, on va appeler nos événements
EvtNomEvenement
- NOTE: par convention, on va appeler nos événements
-
Il faut déclarer l’événement dans le Frontal, p.ex.
@Override public void registerEvents(EventRegistrar registrar) { registrar.registerEvent(EvtAfficherFileAttente.class); registrar.registerEvent(EvtAfficherPartie.class); }
-
On déclenche typiquement un événement
Ntro
à chaque fois qu’on capte un événement JavaFxprivate void installerEvtAfficherPartie() { boutonJoindrePartie.setOnAction(evtFx -> { Ntro.newEvent(EvtAfficherPartie.class) .trigger(); }); }
-
Noter qu’on va créer l’événement Ntro et le déclencher dans le même ligne
- l’idée est de communiquer que l’événement est transitoire (ce n’est pas un objet qui “reste” dans le programme)
- (on va utiliser la même convention pour les message)
Gérer un événement en Ntro
#
-
Il faut créer une tâche pour gérer l’événement
Ntro
tasks.task("afficherVuePartie") .waitsFor(event(EvtAfficherPartie.class)) .executes(inputs -> { // TODO: réagir à l'événement Ntro });
-
La tâche est déclenchée à chaque fois que l’événement est déclenché
- (et que les autres conditions sont remplies)