1°/ Objectifs

L'objectif de ce TP est de reprendre l'application du TP n°1 et d'y ajouter le code qui gère l'appui sur le bouton "Moyenne". Dans un deuxième temps, nous allons modifier le code de la fenêtre principale, et en particulier, nous allons lui ajouter un menu permettant à l'utilisateur de basculer entre les interfaces graphiques versions 1 et 2.

2°/ Action du bouton Moyenne

Afin de gérer l'action du bouton Moyenne, trois ajouts doivent être faits :

  1. Créer une classe ControlButton, dont le rôle est d'écouter le bouton "Moyenne", afin de déclencher le calcul de la moyenne lorsque l'utilisateur clique sur ce bouton.
  2. Créer une méthode addListeners() qui sera appelée après l'initialisation des attributs et qui associera une instance de ControlButton au bouton moyenne pour capturer les évènements ActionEvent qu'il génère.

La classe ControlBouton va contenir le code associé au calcul de la moyenne. En résumé, ce calcul consiste à récupérer les notes et coefficients entrés par l'utilisateur, puis à calculer la moyenne. Par conséquent, la classe ControlBouton a besoin d'avoir accès à la classe Main pour pouvoir lire l'état de certains composants graphiques (qui sont des attributs de Main).

3°/ Contenu de la classe ControlBouton

Lorsque l'on clique sur un Button, un évènement de type ActionEvent est généré. Donc, pour écouter un tel évènement, nous avons besoin d'un objet qui implémente l'interface EventHandler<ActionEvent>. De ce fait, cette classe doit contenir non seulement un constructeur (qui prend en paramètre un objet de la classe Main) mais également définir la méthode handle(ActionEvent e). Cette méthode sera automatiquement appelée lorsque un évènement de type ActionEvent est généré par le bouton écouté. C'est donc cette méthode qui contient le code associé au calcul de la moyenne.

Dans un premier temps, nous allons nous assurer que l'évènement clic est bien récupéré par l'écouteur du bouton. Pour ce faire, ajouter uniquement :

System.out.println( "clic sur le bouton'' );

dans le corps de la méthode handle(). Si cela fonctionne, effacer cette ligne et remplissez la méthodes en suivant les étapes indiquées ci-dessous :

  1. on récupère les notes (Anglais, Math, Info, Géo et éventuellement Option) sous forme de String dans les TextField,
  2. s'il manque une note non optionnelle, on affiche un message d'erreur dans une fenêtre de dialogue et on arrête le traitement,
  3. sinon on convertit les notes en double,
  4. si un de ces notes est inférieure à 0 ou supérieure à 20, on affiche un message d'erreur dans une fenêtre de dialogue et on arrête le traitement,
  5. on vérifie si la case à cocher "Prendre en compte les coefficients est cochée". Si non, mettre tous les coefficient à 1 et aller directement en 8.
  6. on récupère les coefficients de chaque matière, sous forme de double, en vérifiant quel bouton est coché,
  7. on vérifie quelle option est prise et on en déduit un coefficient : 2 pour latin et grec, 1 pour sport.
  8. on calcule la somme des coefficients en prenant garde de ne pas ajouter celui de l'option si la note d'option n'existe pas.
  9. on calcule la moyenne générale en faisant la somme de chaque note (sauf éventuellement celle d'option) multipliée par son coefficient et en divisant le total par la somme des coefficients calculée en 7.