|
|
Étape
|
Pour identifier la prochaine étape
|
|
1
|
La VueA est affichée
|
-
Trouver le fx:id du bouton du bas (celui qui sera cliqué)
-
Inspecter le fichier vue_a.fxml
<!-- ... -->
<Button
fx:id="boutonA"
text="%texteA">
</Button> <!-- bouton du haut -->
<Pane styleClass="espacement,petit"/>
<Label
fx:id="labelA"/>
<Pane styleClass="espacement,petit"/>
<Button
fx:id="boutonB"
text="%texteB">
</Button> <!-- bouton du bas -->
-
Le fx:id du bouton cliqué est boutonB
|
|
2
|
Le bouton du bas est cliqué
|
-
Dans la VueA, trouver le capteur d’action installé sur le bouton appelé boutonB
-
Inspecter le code de VueA
public class VueA extends ViewFx {
// ...
@FXML
private Button boutonB;
@Override
public void initialize() {
// ...
boutonB.setOnAction(evtFx -> {
Ntro.newMessage(MsgA.class)
.setParamA(MaquetteDepart.chaineAuHasard())
.setParamB(MaquetteDepart.entierAuHasard())
.send();
});
}
-
Avant d’envoyer le message, on va sauvegarder deux paramètres dans le message:
paramA avec la valeur de retour de MaquetteDepart.chaineAuHasard()
paramB avec la valeur de retour de MaquetteDepart.entierAuHasard()
-
Le message est ensuite envoyé vers le dorsal avec avec send()
|
|
3
|
Le message est envoyé
|
-
Le message va être capté dans une tâche du Dorsal
-
En VSCode, placer le curseur sur MsgA et faire Maj+F12
- autre option: clic-droit => Atteindre les références
-
La tâche qui capte le message est tacheG1
|
|
4
|
La tacheG1 s’exécute
|
-
Inspecter le code de TachesG.tacheG1
private static void tacheG1(BackendTasks subTasks) {
subTasks.task("tacheG1")
.waitsFor(model(ModeleA.class))
.waitsFor(message(MsgA.class))
.executes(inputs -> {
var objA = inputs.get(message(MsgA.class));
var objB = inputs.get(model(ModeleA.class));
objA.methodeA(objB);
});
}
-
La tâche récupère le message reçu et le modèle, puis
- appelle la
methodeA du message, avec le modèle comme argument
-
En VSCode, placer le curseur sur methodeA et faire F12
- autre option: clic-droit => Atteindre la définition
|
|
5
|
MsgA.methodeA s’exécute
|
-
Inspecter le code de MsgA.methodeA
public class MsgA extends Message<MsgA> {
private String paramA;
private int paramB;
// ...
public void methodeA(ModeleA objA) {
objA.methodeA(paramA, paramB);
}
-
Le message mémorise les valeurs de paramA et paramB
-
Quand le message est reçu, la methodeA appelle le modèle, et passe les valeurs de paramA et paramB
-
En VSCode, placer le curseur sur le methodeA de obj.methodeA et faire F12
- autre option: clic-droit => Atteindre la définition
|
|
6
|
ModeleA.methodA s’exécute
|
-
Inspecter le code de ModeleA.methodeA
public class ModeleA implements Model, WatchJson, WriteObjectGraph {
// ...
private List<ValeurA> valeurs = new ArrayList<>();
// ...
public void methodeA(String paramA, int paramB) {
valeurs.add(new ValeurA(paramA, paramB));
}
-
La méthode construit une nouvelle valeur avec les paramètres reçu, puis ajoute cette valeur dans la liste
|
|
7
|
Le ModeleA est modifié
|
-
Si une tâche avec .waitsFor(modified(ModeleA) existe, elle sera exécutée
-
En VSCode, faire Ctrl+Maj+F pour chercher dans les fichiers
- chercher pour
modified(ModeleA
-
On voit que ça existe dans TachesD (attention d’ouvrir le TachesD du projet dep05):
|
|
8
|
La tacheD1 s’exécute
|
-
Inspecter le code de la tacheD1
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);
});
}
-
On a déjà vu cette tâche au tutoriel 4, c’est la tâche qui affiche le modèle en mode texte dans la VueA
|