restricted:mco-2:correction:tp4

Correction TP4

Seuls UserInterface et Controller ont changé. On a mis en place des getter dans UserInterface et ont les a utilisés dans le contrôleur.

UserInterface.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 TextField todoItemInput;
    private Button addButton;
 
    public UserInterface() {
        root = generateUI();
    }
 
    private Group generateUI() {
        Group uiRoot = new Group();
 
        HBox hBox = new HBox(10);
        uiRoot.getChildren().add(hBox);
 
        Text text = new Text("Input:");
        todoItemInput = new TextField();
        addButton = new Button("add");
 
        hBox.getChildren().addAll(text, todoItemInput, addButton);
 
        return uiRoot;
    }
 
    public Group getRoot() {
        return root;
    }
 
    public TextField getTodoItemInput() {
        return todoItemInput;
    }
 
    public Button getAddButton() {
        return addButton;
    }
}

Controller.java

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;
 
        Button button = vue.getAddButton();
 
        button.setOnAction(this::handleButtonAdd);
    }
 
    private void handleButtonAdd(ActionEvent actionEvent) {
        String todoItemText = vue.getTodoItemInput().getText();
        if (!todoItemText.equals("")) {
            model.add(todoItemText);
        }
 
        System.out.println(model);
    }
}

Javafx 8 permet de faire de nombreux agencements de composants graphique, lisez par exemple ce tutorial sur les layouts.

On a ajouté un champ contenant notre liste dans la vue et on l'a utilisé dans le contrôleur.

UserInterface.java

package com.mco;
 
import javafx.scene.Group;
import javafx.scene.control.Button;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.text.Text;
 
public class UserInterface {
    private Group root;
 
    private TextField todoItemInput;
    private Button addButton;
    private VBox todoItemList;
 
    public UserInterface() {
        root = generateUI();
    }
 
    private Group generateUI() {
        Group uiRoot = new Group();
 
        HBox hBox = new HBox(10);
 
 
        Text text = new Text("Input:");
        todoItemInput = new TextField();
        addButton = new Button("add");
 
        hBox.getChildren().addAll(text, todoItemInput, addButton);
 
        VBox vBox = new VBox(20);
 
        todoItemList = new VBox(5);
        ScrollPane scrollPane = new ScrollPane();
        scrollPane.setContent(todoItemList);
        scrollPane.setPrefSize(200, 200);
 
        vBox.getChildren().add(hBox);
        vBox.getChildren().add(scrollPane);
 
        uiRoot.getChildren().add(vBox);
 
        return uiRoot;
    }
 
    public Group getRoot() {
        return root;
    }
 
    public TextField getTodoItemInput() {
        return todoItemInput;
    }
 
    public Button getAddButton() {
        return addButton;
    }
 
    public VBox getTodoItemList() {
        return todoItemList;
    }
}

Controller.java

package com.mco;
 
import javafx.event.ActionEvent;
import javafx.scene.control.Button;
import javafx.scene.text.Text;
 
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;
 
        Button button = vue.getAddButton();
 
        button.setOnAction(this::handleButtonAdd);
    }
 
    private void handleButtonAdd(ActionEvent actionEvent) {
        String todoItemText = vue.getTodoItemInput().getText();
        if (!todoItemText.equals("")) {
            model.add(todoItemText);
            vue.getTodoItemList().getChildren().add(new Text(todoItemText));
        }
 
    }
}

UserInterface.java

package com.mco;
 
import javafx.scene.Group;
import javafx.scene.control.Button;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.text.Text;
 
public class UserInterface {
    private Group root;
 
    private TextField todoItemInput;
    private Button addButton;
    private VBox todoItemList;
    private Text totalItem;
    private int numberTotalItem;
 
    public UserInterface() {
        numberTotalItem = 0;
        root = generateUI();
    }
 
    private Group generateUI() {
        Group uiRoot = new Group();
 
        HBox hBox = new HBox(10);
 
 
        Text text = new Text("Input:");
        todoItemInput = new TextField();
        addButton = new Button("add");
 
        hBox.getChildren().addAll(text, todoItemInput, addButton);
 
        VBox vBox = new VBox(20);
 
        todoItemList = new VBox(5);
        ScrollPane scrollPane = new ScrollPane();
        scrollPane.setContent(todoItemList);
        scrollPane.setPrefSize(200, 200);
 
        vBox.getChildren().add(hBox);
        vBox.getChildren().add(scrollPane);
 
        totalItem = new Text();
        text = new Text("Total item:");
        HBox hBoxNumberItem = new HBox(10);
        hBoxNumberItem.getChildren().addAll(text, totalItem);
 
        totalItem.setText(String.valueOf(numberTotalItem));
        vBox.getChildren().add(hBoxNumberItem);
 
        uiRoot.getChildren().add(vBox);
 
        return uiRoot;
    }
 
    public Group getRoot() {
        return root;
    }
 
    public TextField getTodoItemInput() {
        return todoItemInput;
    }
 
    public Button getAddButton() {
        return addButton;
    }
 
    public VBox getTodoItemList() {
        return todoItemList;
    }
 
    public void setNumberTotalItem(int numberTotalItem) {
        this.numberTotalItem = numberTotalItem;
        totalItem.setText(String.valueOf(numberTotalItem));
    }
}

Controller.java

package com.mco;
 
import javafx.event.ActionEvent;
import javafx.scene.control.Button;
import javafx.scene.text.Text;
 
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;
 
        Button button = vue.getAddButton();
 
        button.setOnAction(this::handleButtonAdd);
    }
 
    private void handleButtonAdd(ActionEvent actionEvent) {
        String todoItemText = vue.getTodoItemInput().getText();
        if (!todoItemText.equals("")) {
            model.add(todoItemText);
            vue.getTodoItemList().getChildren().add(new Text(todoItemText));
            vue.setNumberTotalItem(model.size());
        }
 
    }
}

Main.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 {
        // on met en place la racine de la scène
        Group root = new Group();
        Scene theScene = new Scene(root);
        primaryStage.setScene(theScene);
 
 
        //Vue
        UserInterface userInterface = new UserInterface();
        root.getChildren().add(userInterface.getRoot());
 
        //Modèle
        ArrayList<TodoItem> todoList = new ArrayList<>();
 
        //Contrôleur
        Controller controller = new Controller(todoList, userInterface);
 
        //Affichage de l'UI
        primaryStage.setTitle("Todo List");
        primaryStage.show();
    }
}

TodoItem.java

package com.mco;
 
import java.util.Date;
 
 
public class TodoItem {
    private String name;
    private Date creation;
 
    public TodoItem(String name) {
        this.name = name;
        creation = new Date();
    }
 
    public String getName() {
        return name;
    }
 
    public Date getCreation() {
        return creation;
    }
}

UserIterface.java

package com.mco;
 
import javafx.scene.Group;
import javafx.scene.control.Button;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.text.Text;
 
public class UserInterface {
    private Group root;
 
    private TextField todoItemInput;
    private Button addButton;
    private VBox todoItemList;
    private Text totalItem;
    private int numberTotalItem;
 
    public UserInterface() {
        numberTotalItem = 0;
        root = generateUI();
    }
 
    private Group generateUI() {
        Group uiRoot = new Group();
 
        HBox hBox = new HBox(10);
 
 
        Text text = new Text("Input:");
        todoItemInput = new TextField();
        addButton = new Button("add");
 
        hBox.getChildren().addAll(text, todoItemInput, addButton);
 
        VBox vBox = new VBox(20);
 
        todoItemList = new VBox(5);
        ScrollPane scrollPane = new ScrollPane();
        scrollPane.setContent(todoItemList);
        scrollPane.setPrefSize(300, 200);
 
        vBox.getChildren().add(hBox);
        vBox.getChildren().add(scrollPane);
 
        totalItem = new Text();
        text = new Text("Total item:");
        HBox hBoxNumberItem = new HBox(10);
        hBoxNumberItem.getChildren().addAll(text, totalItem);
 
        totalItem.setText(String.valueOf(numberTotalItem));
        vBox.getChildren().add(hBoxNumberItem);
 
        uiRoot.getChildren().add(vBox);
 
        return uiRoot;
    }
 
    public void addTodoItem(TodoItem item) {
        HBox hBox = new HBox(20);
        hBox.getChildren().addAll(new Text(item.getName()),
                new Text(item.getCreation().toString()));
 
        todoItemList.getChildren().add(hBox);
    }
 
    public Group getRoot() {
        return root;
    }
 
    public TextField getTodoItemInput() {
        return todoItemInput;
    }
 
    public Button getAddButton() {
        return addButton;
    }
 
    public VBox getTodoItemList() {
        return todoItemList;
    }
 
    public void setNumberTotalItem(int numberTotalItem) {
        this.numberTotalItem = numberTotalItem;
        totalItem.setText(String.valueOf(numberTotalItem));
    }
}

Controller.java

package com.mco;
 
import javafx.event.ActionEvent;
import javafx.scene.control.Button;
 
import java.util.ArrayList;
 
public class Controller {
    private ArrayList<TodoItem> model;
    private UserInterface vue;
 
    public Controller(ArrayList<TodoItem> model, UserInterface vue) {
        this.model = model;
        this.vue = vue;
 
        Button button = vue.getAddButton();
 
        button.setOnAction(this::handleButtonAdd);
    }
 
    private void handleButtonAdd(ActionEvent actionEvent) {
        String todoItemText = vue.getTodoItemInput().getText();
        if (!todoItemText.equals("")) {
            TodoItem item = new TodoItem(todoItemText);
            model.add(item);
            vue.addTodoItem(item);
 
            vue.setNumberTotalItem(model.size());
        }
 
    }
}

Seul UserInterface a été impacté.

UserInterface.java

package com.mco;
 
import javafx.scene.Group;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
 
public class UserInterface {
    private Group root;
 
    private InputTodoItemUI inputTodoItemUI;
    private TodoListUI todoListUI;
    private SummaryUI summaryUI;
 
    public UserInterface() {
        root = generateUI();
    }
 
    private Group generateUI() {
        Group uiRoot = new Group();
        VBox vBox = new VBox(20);
 
        inputTodoItemUI = new InputTodoItemUI();
        todoListUI = new TodoListUI();
        summaryUI = new SummaryUI();
 
        vBox.getChildren().addAll(
                inputTodoItemUI.getRoot(),
                todoListUI.getRoot(),
                summaryUI.getRoot()
        );
 
        uiRoot.getChildren().add(vBox);
 
        return uiRoot;
    }
 
    public void addTodoItem(TodoItem item) {
        todoListUI.addTodoItem(item);
    }
 
    public Group getRoot() {
        return root;
    }
 
    public TextField getTodoItemInput() {
        return inputTodoItemUI.getTodoItemInput();
    }
 
    public Button getAddButton() {
        return inputTodoItemUI.getAddButton();
    }
 
    public void setNumberTotalItem(int numberTotalItem) {
        summaryUI.setNumberTotalItem(numberTotalItem);
    }
}

InputTodoItemUI.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 InputTodoItemUI {
 
    private Group root;
    private TextField todoItemInput;
    private Button addButton;
 
    public InputTodoItemUI() {
        root = new Group();
        HBox hBox = new HBox(10);
 
 
        Text text = new Text("Input:");
        todoItemInput = new TextField();
        addButton = new Button("add");
 
        hBox.getChildren().addAll(text, todoItemInput, addButton);
 
        root.getChildren().add(hBox);
    }
 
    public Group getRoot() {
        return root;
    }
 
    public TextField getTodoItemInput() {
        return todoItemInput;
    }
 
    public Button getAddButton() {
        return addButton;
    }
}

TodoListUI.java

package com.mco;
 
import javafx.scene.Group;
import javafx.scene.control.ScrollPane;
import javafx.scene.layout.VBox;
 
public class TodoListUI {
    private Group root;
    private VBox todoItemList;
 
    public TodoListUI() {
        root = new Group();
        todoItemList = new VBox(5);
        ScrollPane scrollPane = new ScrollPane();
        scrollPane.setContent(todoItemList);
        scrollPane.setPrefSize(300, 200);
 
        root.getChildren().add(scrollPane);
    }
 
    public void addTodoItem(TodoItem item) {
        TodoItemUI todoItemUI = new TodoItemUI(item);
        todoItemList.getChildren().add(todoItemUI.getRoot());
    }
 
    public Group getRoot() {
        return root;
    }
 
}

TodoItemUI.java

package com.mco;
 
 
import javafx.scene.Group;
import javafx.scene.layout.HBox;
import javafx.scene.text.Text;
 
public class TodoItemUI {
    private Group root;
    public TodoItemUI(TodoItem item) {
        root = new Group();
 
        HBox hBox = new HBox(20);
        hBox.getChildren().addAll(
                new Text(item.getName()),
                new Text(item.getCreation().toString())
        );
        root.getChildren().add(hBox);
    }
 
    public Group getRoot() {
        return root;
    }
 
}

SummaryUI.java

package com.mco;
 
 
import javafx.scene.Group;
import javafx.scene.layout.HBox;
import javafx.scene.text.Text;
 
public class SummaryUI {
    private Group root;
    private Text totalItem;
    private int numberTotalItem;
 
    public SummaryUI() {
        root = new Group();
 
        numberTotalItem = 0;
        totalItem = new Text();
        Text text = new Text("Total item:");
        HBox hBoxNumberItem = new HBox(10);
        hBoxNumberItem.getChildren().addAll(text, totalItem);
 
        totalItem.setText(String.valueOf(numberTotalItem));
 
        root.getChildren().add(hBoxNumberItem);
 
    }
 
    public Group getRoot() {
        return root;
    }
    public void setNumberTotalItem(int numberTotalItem) {
        this.numberTotalItem = numberTotalItem;
        totalItem.setText(String.valueOf(numberTotalItem));
    }
 
}
  • restricted/mco-2/correction/tp4.txt
  • Dernière modification : 2016/03/30 12:58
  • de fbrucker