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' |