Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# SAE 3.02 -- Classification : MVC et Nuage de points dynamique
L'objectif de ce TP est de se familiariser avec le paquetage [javafx.scene.chart](https://docs.oracle.com/javase/8/javafx/api/javafx/scene/chart/package-summary.html) qui sera utile pour votre SAÉ.
Ce patron se basant sur la notion d’Observateur/Observé, les classes du TP précédent sont disponibles dans le paquetage <code>fr.univlille.iutinfo.r304.utils</code>
C'est aussi l'occasion de s'exercer de nouveau dans l'application du patron architectural MVC.
Vous devez réaliser une application qui permet de visualiser des fréquences de tirage de dés.
Voici par exemple à quoi devrait ressembler votre application.
![Exemple](doc/jets_des.mp4)
## Le modèle
Pour commencer, on va implémenter la partie modèle, qui va simuler des lancers de dé.
N'oubliez pas de faire en sorte que le modèle notifie ses observateurs après chaque lancer.
## La vue et le contrôleur
On s'intéresse à présent à la vue et au contrôleur.
Dans un sous-paquetage *view*, ajouter la classe qui permettra de visualiser les résultats des lancers de dés. Pour rappel, on souhaite voir ces fréquences sous la forme d'un nuage de points.
### Le contrôleur
On souhaite tout simplement que lors d'un clic sur le bouton *Lancer*, un dé soit lancé côté modèle.
Pas la peine de faire compliqué ici, une lambda sur le bouton ajouté à la vue fera l'affaire.
À cette étape, vous pouvez faire un scénario (*Main* ou classe de Test) pour vérifier que l'appui sur le bouton provoque bien le lancer d'un nouveau dé.
### La vue et l'interaction
On va recourir à la classe [javafx.scene.chart.ScatterChart<X,Y>](https://docs.oracle.com/javase/8/javafx/api/javafx/scene/chart/ScatterChart.html), un composant qui représente le nuage en lui-même.
Pour instancier ce nuage, on fournira à la création deux [NumberAxis](https://docs.oracle.com/javase/8/javafx/api/javafx/scene/chart/NumberAxis.html)), qui indiquent quels bornes et quel unité utiliser sur l'axe X et sur l'axe Y du graphique.
L'ajout des points se fait ensuite par "série", à savoir un ensemble de points qui seront tous représentés et légendés d'une même manière.
Si on veut ajouter une série sur une instance de *ScatterChart* nommée *chart*, on appellera la méthode
```java
chart.getData().add(...)
```
qui attend en paramètre une [XYChart.Series<X,Y>](https://docs.oracle.com/javase/8/javafx/api/javafx/scene/chart/XYChart.Series.html).
Cette série sera elle même à remplir avec des [XYChart.Data](https://docs.oracle.com/javase/8/javafx/api/javafx/scene/chart/XYChart.Data.html), de manière similaire :
```java
serie.getData().add(...)
```
Le tout est maintenant de s'assurer que la vue observe bien le modèle est se met à jour lorsque celui-ci est modifié par un nouveau lancer de dé.
On se contentera ici d'une solution non optimale où tout nouveau lancer se traduira par le retracé de l'ensemble des points du nuage.
## Prolongements
* Ajoutez un bouton supplémentaire qui permet de tirer 5 dés à la fois.
* Essayez de faire en sorte que seul le point correspondant à la valeur tirée lors d'un lancer de dé soit mise à jour.
* Ajouter une seconde vue simultanée qui présente chaque résultat sous la forme d'un pourcentage (1 : 10% - 2 : 9% - etc.)