Java FX 8 : Notre première UI.
Nous allons essayer de modéliser au mieux l'UI du TD2 :
Nous allons y aller pas à pas. Et nous arrêterons juste avant l'implémentation des checklists.
Le code suivant met en place le pattern de conception MVC :
ArrayList<String>
UserInterface.java
Controller.java
Cette construction est pour l'instant assez vide mais elle permet de voir :
Trois classes : Main, UserInterface et Controller
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<String> todoList = new ArrayList<>(); //Vue UserInterface userInterface = new UserInterface(); //Contrôleur Controller controller = new Controller(todoList, userInterface); //Affichage de l'UI Scene theScene = new Scene(userInterface.getRoot()); primaryStage.setScene(theScene); primaryStage.setTitle("Todo List"); primaryStage.show(); } }
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("Input:"); TextField textField = new TextField(); addButton = new Button("add"); hBox.getChildren().addAll(text, textField, addButton); root.getChildren().add(hBox); } public Group getRoot() { return root; } public Button getAddButton() { return addButton; } }
package com.mco; import javafx.event.ActionEvent; import javafx.scene.control.Button; import java.util.ArrayList; public class Controller { private ArrayList<String> model; private UserInterface vue; public Controller(ArrayList<String> model, UserInterface vue) { this.model = model; this.vue = vue; vue.getAddButton().setOnAction(this::handleButtonAdd); } private void handleButtonAdd(ActionEvent actionEvent) { System.out.println("Click !"); } }
Javafx 8 permet de faire de nombreux agencements de composants graphique, vous pourrez en voir la plupart dans ce tutorial sur les layouts. Nous n'utiliserons qu'une petite partie ce ces possibilités.
Ajoutez une troisième partie à votre UI contenant le résumé. Pour l'instant ce résumé ne doit contenir que ne nombre d'items du modèle.
Pour cela il pourra être nécessaire de :
String.valueOf()
Un todoItem est maintenant composé non seulement d'un intitulé, mais également de sa date de création.
ArrayList<TodoItem>
. Adaptez le contrôleur au nouveau modèle de données. Pour l'instant ne prenez pas en compte la Date. void addTodoItem(TodoItem item)
. Plutôt que d'ajouter simplement du texte, on pourra ajouter une HBox contenant le texte et la date sous forme de texte (prenez celle par défaut pour l'instant).Plus on va ajouter des choses à la vue, moins la Classe UserInterface sera compréhensible.
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 :
InputUI
: qui sera en charge de l'intitulé de l'item à ajouter et du bouton AddTodoUI
: qui gérera la liste des items sous forme graphiqueSummaryUI
: qui contiendra le résumé.Vous devrez résoudre les problèmes suivants :