Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
| restricted:mco-2:tp4 [2016/03/30 09:28] – fbrucker | restricted:mco-2:tp4 [2016/04/29 15:36] (Version actuelle) – [A faire] edauce | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | ====== TP4 ====== | ||
| + | **Java FX 8 : Notre première UI.** | ||
| + | |||
| + | Nous allons essayer de modéliser au mieux l'UI du TD2 : | ||
| + | |||
| + | {{restricted: | ||
| + | |||
| + | Nous allons y aller pas à pas. Et nous arrêterons juste avant l' | ||
| + | |||
| + | ===== MVC ===== | ||
| + | |||
| + | Le code suivant met en place le pattern de conception [[https:// | ||
| + | * le Modèle est pour l' | ||
| + | * la Vue : '' | ||
| + | * Le contrôleur : '' | ||
| + | |||
| + | Cette construction est pour l' | ||
| + | * une organisation générale en MVC avec trois classes distinctes. | ||
| + | * pour la vue : | ||
| + | * une façon d' | ||
| + | * les éléments d' | ||
| + | * pour le contrôleur : | ||
| + | * le constructeur qui lie modèle et vue et prépare les réactions aux événements. | ||
| + | * lier l' | ||
| + | |||
| + | ==== Le code ==== | ||
| + | |||
| + | Trois classes : Main, UserInterface et Controller | ||
| + | |||
| + | === Main.java === | ||
| + | |||
| + | <code java> | ||
| + | |||
| + | |||
| + | package com.mco; | ||
| + | |||
| + | import javafx.application.Application; | ||
| + | import javafx.scene.Group; | ||
| + | import javafx.scene.Scene; | ||
| + | import javafx.stage.Stage; | ||
| + | |||
| + | import java.util.ArrayList; | ||
| + | |||
| + | public class Main extends Application { | ||
| + | |||
| + | public static void main(String[] args) { | ||
| + | launch(args); | ||
| + | } | ||
| + | |||
| + | |||
| + | @Override | ||
| + | public void start(Stage primaryStage) throws Exception { | ||
| + | |||
| + | //Modèle | ||
| + | ArrayList< | ||
| + | |||
| + | //Vue | ||
| + | UserInterface userInterface = new UserInterface(); | ||
| + | |||
| + | // | ||
| + | Controller controller = new Controller(todoList, | ||
| + | |||
| + | //Affichage de l'UI | ||
| + | Scene theScene = new Scene(userInterface.getRoot()); | ||
| + | primaryStage.setScene(theScene); | ||
| + | primaryStage.setTitle(" | ||
| + | primaryStage.show(); | ||
| + | } | ||
| + | } | ||
| + | |||
| + | |||
| + | </ | ||
| + | |||
| + | === UserInterface.java === | ||
| + | |||
| + | <code java> | ||
| + | |||
| + | package com.mco; | ||
| + | |||
| + | import javafx.scene.Group; | ||
| + | import javafx.scene.control.Button; | ||
| + | import javafx.scene.control.TextField; | ||
| + | import javafx.scene.layout.HBox; | ||
| + | import javafx.scene.text.Text; | ||
| + | |||
| + | public class UserInterface { | ||
| + | private Group root; | ||
| + | private Button addButton; | ||
| + | |||
| + | public UserInterface() { | ||
| + | root = new Group(); | ||
| + | generateUI(); | ||
| + | } | ||
| + | |||
| + | private void generateUI() { | ||
| + | |||
| + | //First block | ||
| + | HBox hBox = new HBox(10); | ||
| + | Text text = new Text(" | ||
| + | TextField textField = new TextField(); | ||
| + | addButton = new Button(" | ||
| + | hBox.getChildren().addAll(text, | ||
| + | |||
| + | root.getChildren().add(hBox); | ||
| + | |||
| + | } | ||
| + | |||
| + | public Group getRoot() { | ||
| + | return root; | ||
| + | } | ||
| + | |||
| + | public Button getAddButton() { | ||
| + | return addButton; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | === Controller.java === | ||
| + | |||
| + | <code java> | ||
| + | package com.mco; | ||
| + | |||
| + | import javafx.event.ActionEvent; | ||
| + | import javafx.scene.control.Button; | ||
| + | |||
| + | import java.util.ArrayList; | ||
| + | |||
| + | public class Controller { | ||
| + | private ArrayList< | ||
| + | private UserInterface vue; | ||
| + | |||
| + | public Controller(ArrayList< | ||
| + | this.model = model; | ||
| + | this.vue = vue; | ||
| + | |||
| + | |||
| + | vue.getAddButton().setOnAction(this:: | ||
| + | } | ||
| + | |||
| + | private void handleButtonAdd(ActionEvent actionEvent) { | ||
| + | System.out.println(" | ||
| + | } | ||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | ==== A faire ==== | ||
| + | |||
| + | - Créez un projet et faites en sorte d' | ||
| + | - Comprenez comment le code fonctionne. En particulier les liens entre les objets de la vue et du contrôleur. | ||
| + | - Faites en sorte que soit affiché dans la console le texte du[[https:// | ||
| + | - Plutôt que de l' | ||
| + | - N' | ||
| + | |||
| + | |||
| + | ===== Amélioration de UI ===== | ||
| + | |||
| + | Javafx 8 permet de faire de nombreux agencements de composants graphique, vous pourrez en voir la plupart dans ce [[http:// | ||
| + | |||
| + | ==== Représentez le modèle ==== | ||
| + | |||
| + | - En utilisant des [[http:// | ||
| + | - Insérez votre liste dans un [[https:// | ||
| + | |||
| + | |||
| + | ==== Ajout du résumé ==== | ||
| + | |||
| + | Ajoutez une troisième partie à votre UI contenant le résumé. Pour l' | ||
| + | |||
| + | Pour cela il pourra être nécessaire de : | ||
| + | * créer un attribut pour le nombre d' | ||
| + | * créer un setter pour le nombre d' | ||
| + | * modifier la valeur du texte dans la vue lorsque ce nombre change | ||
| + | * transformer un nombre en chaîne de caractères en utilisant la méthode '' | ||
| + | |||
| + | ===== Mise à jour du modèle ===== | ||
| + | |||
| + | Un todoItem est maintenant composé non seulement d'un intitulé, mais également de sa date de création. | ||
| + | |||
| + | ==== A faire ==== | ||
| + | |||
| + | - Créez une classe TodoItem composée d'un intitulé texte et d'une date (on pourra utiliser la classe [[http:// | ||
| + | - Mettez à jour le modèle pour qu'il devienne une '' | ||
| + | - Ajoutez la Date à la représentation graphique. Vous pourrez pour cela ajouter une méthode à la vue qui ajoute un TodoItem à la vue '' | ||
| + | |||
| + | |||
| + | ===== Mise à jour de la vue ===== | ||
| + | |||
| + | Plus on va ajouter des choses à la vue, moins la Classe UserInterface sera compréhensible. | ||
| + | |||
| + | ==== A faire ==== | ||
| + | |||
| + | Séparez les parties de la classe UserInterface en plusieurs classes. On conservera UserInterface qui fera le lien entre les parties et le contrôleur. | ||
| + | |||
| + | Créer les classes : | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | Vous devrez résoudre les problèmes suivants : | ||
| + | * les sous-classes vont fabriquer leur propre arbre de scène qu'il faudra ajouter à l' | ||
| + | * les liens vers les objets de l' | ||