1°/ Objectifs
Deux interfaces graphiques doivent être implémentées. Leur aspect est représenté sur les figures ci-dessous.
Ces deux interfaces contiennent les mêmes composants graphiques de base, mais diffèrent sur leur positionnement. D'autre part, le traitement sous-jacent à ces deux interfaces est exactement le même : on souhaite calculer la moyenne des notes entrées par l'utilisateur lorsque celui-ci clique sur le bouton moyenne. Si une note est ajoutée en matière optionnelle, alors le coefficient de la matière dépend de la matière choisie (Latin = 2, Grec = 2 et Sport = 1). La partie traitement sera gérée dans les TP suivants.
2°/ Première version
2.1°/ Structure de base de l'interface
- Créer un nouveau projet JavaFX avec l'IDE Intellij IDEA fichier. Il contiendra le fichier Main.java qui contient la classe Main. Dans cette classe, le point d'entrée à l'application, la fonction main(), est définie.
- Pour ce premier TP simple, tout le code va être ajouté à la classe Main. Vous pouvez supprimer les fichiers Controller.java et sample.fxml qui ne seront pas utilisés dans ce TP.
- Dans la méthode start() d'Application, ajoutez :
- un appel à la méthode initWidgets() qui initialise les composants graphiques avec lesquels l'utilisateur va interagir.
- un appel à la méthode addWidgetsToSceneV1() qui ajoute les composants graphiques à la fenêtre.
- un appel à la méthode primaryStage.setTitle() pour ajouter un titre à la fenêtre
- un appel à la méthode primaryStage.setScene() pour ajouter la scène contenant l'interface graphique à la fenêtre.
- un appel à la méthode primaryStage.show() pour afficher la fenêtre.
Remarque : les méthodes initWidgets() et addWidgetsToSceneV1() seront définies plus tard.
2.2°/ Attributs de classe
- Définir tous les attributs de l'interface graphique.
- Attention : il n'est pas nécessaire de mettre tous les widgets en attributs. Seuls les objets en interaction avec l'utilisateur ou bien ceux dont on devra lire/modifier l'état (dans la partie traitement de l'application) doivent faire partie des attributs de la classe. D'autre part, il n'est en général pas nécessaire de mettre les layouts en attribut, et c'est le cas ici.
- Quelques exemples d'attributs :
- TextField tfAnglais, qui contiendra la note d'anglais entrée par l'utilisateur.
- RadioButton rbAng1, qui correspond au bouton de coefficient 1 pour la note d'anglais.
- ComboBox<String> listOption, qui contient le nom de l'option choisie (Latin, Grec ou Sport). On a besoin de cet attribut, pour connaître le coefficient de la note de l'option.
- Label lMoy, qui contient initialement la string "Valeur", puis qui contiendra la moyenne calculée après un clic sur le bouton Moyenne. On a besoin de cet attribut puisque la valeur du Label va être modifiée.
- Remarque : les widgets tels que le Label lAnglais n'ont pas besoin d'être définis en tant qu'attributs puisqu'ils n'ont aucune interaction avec l'utilisateur et la partie traitement ne liera/modifiera jamais leur état.
2.3°/ Méthode initWidgets()
- Ecrire le code de cette méthode, qui permet de définir tous les attributs de l'interface graphique.
- Il faut notamment instancier tous les widgets déclarés comme attributs et, pour certains, initialiser des paramètres.
- Attention : cette méthode ne gère pas le placement des widgets mais seulement leur création et initialisation. Il n'y a donc aucune instanciation de Layout dans cette méthode.