From 7d221e900fba3e3d0a8e1e5c646793c0757207f4 Mon Sep 17 00:00:00 2001 From: Matias Mennecart <matias.mennecart.etu@univ-lille.fr> Date: Fri, 25 Oct 2024 11:10:20 +0200 Subject: [PATCH] Optimisations et fix de bugs --- res/stages/data-view-stage.fxml | 33 ++++----- res/stages/display-settings-stage.fxml | 25 ------- .../controller/AddDataController.java | 13 ++-- .../controller/AxesSettingsController.java | 3 - .../controller/DataStageController.java | 36 +--------- .../controller/DisplaySettingsController.java | 19 ----- .../controller/LoadDataController.java | 10 +-- .../controller/MainStageController.java | 20 +----- .../model/ClassificationModel.java | 5 +- .../sae/classification/model/Iris.java | 7 +- .../classification/model/LoadableData.java | 4 -- .../sae/classification/view/AddDataView.java | 1 - .../classification/view/AxesSettingsView.java | 3 - .../classification/view/DataStageView.java | 70 ++++++++++++++----- .../classification/view/MainStageView.java | 42 +++++++---- 15 files changed, 110 insertions(+), 181 deletions(-) delete mode 100644 res/stages/display-settings-stage.fxml delete mode 100644 src/main/java/fr/univlille/sae/classification/controller/DisplaySettingsController.java diff --git a/res/stages/data-view-stage.fxml b/res/stages/data-view-stage.fxml index 7adaf2e..6ad4174 100644 --- a/res/stages/data-view-stage.fxml +++ b/res/stages/data-view-stage.fxml @@ -1,20 +1,26 @@ <?xml version="1.0" encoding="UTF-8"?> -<?import javafx.geometry.*?> -<?import javafx.scene.*?> -<?import javafx.scene.chart.*?> -<?import javafx.scene.control.*?> -<?import javafx.scene.image.*?> -<?import javafx.scene.layout.*?> -<?import javafx.scene.text.*?> -<?import javafx.stage.*?> +<?import javafx.geometry.Insets?> +<?import javafx.scene.Scene?> +<?import javafx.scene.chart.NumberAxis?> +<?import javafx.scene.chart.ScatterChart?> +<?import javafx.scene.control.Button?> +<?import javafx.scene.control.Label?> +<?import javafx.scene.image.Image?> +<?import javafx.scene.image.ImageView?> +<?import javafx.scene.layout.AnchorPane?> +<?import javafx.scene.layout.HBox?> +<?import javafx.scene.layout.Region?> +<?import javafx.scene.layout.VBox?> +<?import javafx.scene.text.Font?> +<?import javafx.stage.Stage?> -<Stage fx:id="stage" xmlns="http://javafx.com/javafx/17.0.12" xmlns:fx="http://javafx.com/fxml/1" fx:controller="fr.univlille.sae.classification.controller.DataStageController"> +<Stage fx:id="stage" xmlns="http://javafx.com/javafx/21" xmlns:fx="http://javafx.com/fxml/1" fx:controller="fr.univlille.sae.classification.controller.DataStageController"> <scene> <Scene> - <AnchorPane prefHeight="487.0" prefWidth="692.0"> + <AnchorPane prefHeight="380.0" prefWidth="692.0"> <children> - <VBox prefHeight="488.0" prefWidth="691.0"> + <VBox prefHeight="399.0" prefWidth="691.0"> <children> <HBox alignment="TOP_CENTER" prefHeight="356.0" prefWidth="691.0" spacing="5.0"> <children> @@ -52,11 +58,6 @@ </Button> </children> </HBox> - <HBox alignment="CENTER" prefHeight="169.0" prefWidth="691.0" spacing="50.0"> - <children> - <Button fx:id="classifyData" disable="true" mnemonicParsing="false" onAction="#classifyDatas" prefHeight="26.0" prefWidth="157.0" text="Classifier les données" /> - </children> - </HBox> </children> </VBox> </children></AnchorPane> diff --git a/res/stages/display-settings-stage.fxml b/res/stages/display-settings-stage.fxml deleted file mode 100644 index acc017f..0000000 --- a/res/stages/display-settings-stage.fxml +++ /dev/null @@ -1,25 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> - -<?import javafx.scene.*?> -<?import javafx.scene.control.*?> -<?import javafx.scene.layout.*?> -<?import javafx.stage.*?> - -<Stage fx:id="stage" xmlns="http://javafx.com/javafx/17.0.12" xmlns:fx="http://javafx.com/fxml/1" fx:controller="fr.univlille.sae.classification.controller.DisplaySettingsController"> - <scene> - <Scene> - <AnchorPane prefHeight="200" prefWidth="200"> - <children> - <VBox alignment="CENTER" layoutY="1.0" prefHeight="292.0" prefWidth="438.0" spacing="30.0"> - <children> - <HBox alignment="CENTER" prefHeight="58.0" prefWidth="294.0" spacing="20.0"> - <children> - <Label text="Nouvel ajout" /> - <ColorPicker fx:id="addColor" editable="true" /> - </children></HBox> - <Button fx:id="confirmSettings" mnemonicParsing="false" text="Valider" /> - </children></VBox> - </children></AnchorPane> - </Scene> - </scene> -</Stage> diff --git a/src/main/java/fr/univlille/sae/classification/controller/AddDataController.java b/src/main/java/fr/univlille/sae/classification/controller/AddDataController.java index 1a690a0..1780525 100644 --- a/src/main/java/fr/univlille/sae/classification/controller/AddDataController.java +++ b/src/main/java/fr/univlille/sae/classification/controller/AddDataController.java @@ -1,25 +1,19 @@ package fr.univlille.sae.classification.controller; import fr.univlille.sae.classification.model.ClassificationModel; -import fr.univlille.sae.classification.model.Iris; -import fr.univlille.sae.classification.view.DataVisualizationView; import fr.univlille.sae.classification.view.MainStageView; import javafx.fxml.FXML; -import javafx.scene.control.*; +import javafx.scene.control.Spinner; +import javafx.scene.control.SpinnerValueFactory; import javafx.stage.Stage; import java.io.IOException; -import java.text.ParseException; -import java.util.function.UnaryOperator; public class AddDataController { @FXML private Stage stage; - @FXML - private Button confirmAdd; - @FXML private Spinner<Double> sepalLengthSpinner; @@ -36,6 +30,7 @@ public class AddDataController { @FXML public void initialize() { + sepalLengthSpinner.setValueFactory(new SpinnerValueFactory.DoubleSpinnerValueFactory(0.0, 200.0, 3.0,0.1)); sepalWidthSpinner.setValueFactory(new SpinnerValueFactory.DoubleSpinnerValueFactory(0.0, 200.0, 3.0, 0.1)); petalLengthSpinner.setValueFactory(new SpinnerValueFactory.DoubleSpinnerValueFactory(0.0, 200.0, 3.0, 0.1)); @@ -53,7 +48,7 @@ public class AddDataController { this.mainStageView = mainStageView; } - public void validate() throws IOException { + public void validate() { System.out.println("validé"); mainStageView.getController().getClassifyData().setDisable(false); diff --git a/src/main/java/fr/univlille/sae/classification/controller/AxesSettingsController.java b/src/main/java/fr/univlille/sae/classification/controller/AxesSettingsController.java index 16c52b1..ccb845d 100644 --- a/src/main/java/fr/univlille/sae/classification/controller/AxesSettingsController.java +++ b/src/main/java/fr/univlille/sae/classification/controller/AxesSettingsController.java @@ -1,6 +1,5 @@ package fr.univlille.sae.classification.controller; -import fr.univlille.sae.classification.model.ClassificationModel; import fr.univlille.sae.classification.view.DataVisualizationView; import javafx.fxml.FXML; import javafx.scene.control.Button; @@ -18,8 +17,6 @@ public class AxesSettingsController{ @FXML ChoiceBox selectAbs; - @FXML - Button confirmAxes; DataVisualizationView dataVisualizationView; diff --git a/src/main/java/fr/univlille/sae/classification/controller/DataStageController.java b/src/main/java/fr/univlille/sae/classification/controller/DataStageController.java index 2c561a9..2de3bff 100644 --- a/src/main/java/fr/univlille/sae/classification/controller/DataStageController.java +++ b/src/main/java/fr/univlille/sae/classification/controller/DataStageController.java @@ -1,11 +1,10 @@ package fr.univlille.sae.classification.controller; import fr.univlille.sae.classification.model.ClassificationModel; -import fr.univlille.sae.classification.view.*; +import fr.univlille.sae.classification.view.AxesSettingsView; +import fr.univlille.sae.classification.view.DataStageView; import javafx.fxml.FXML; -import javafx.scene.chart.NumberAxis; import javafx.scene.chart.ScatterChart; -import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.stage.Stage; @@ -16,38 +15,14 @@ public class DataStageController { @FXML Stage stage; - @FXML - NumberAxis absAxe; - - @FXML - NumberAxis ordAxe; - - @FXML - Button settings; - - @FXML - Button loadData; - - @FXML - Button classifyData; - @FXML ScatterChart scatterChart; @FXML Label AxesSelected; - Stage loadStage; private DataStageView dataStageView; - /** - * Ouvre l'interface de chargement des données. - * @throws IOException - */ - public void openLoadData() throws IOException { - LoadDataView loadDataView = new LoadDataView(ClassificationModel.getClassificationModel(), stage); - loadDataView.show(); - } public void openAxesSetting()throws IOException { AxesSettingsView axesSettingsView = new AxesSettingsView(ClassificationModel.getClassificationModel(), stage, dataStageView); @@ -58,10 +33,6 @@ public class DataStageController { this.dataStageView = dataStageView; } - public void classifyDatas() { - ClassificationModel.getClassificationModel().classifierDonnees(); - classifyData.setDisable(true); - } public ScatterChart getScatterChart() { @@ -72,7 +43,4 @@ public class DataStageController { this.AxesSelected.setText(texte); } - public Button getClassifyData() { - return this.classifyData; - } } diff --git a/src/main/java/fr/univlille/sae/classification/controller/DisplaySettingsController.java b/src/main/java/fr/univlille/sae/classification/controller/DisplaySettingsController.java deleted file mode 100644 index 203a5ae..0000000 --- a/src/main/java/fr/univlille/sae/classification/controller/DisplaySettingsController.java +++ /dev/null @@ -1,19 +0,0 @@ -package fr.univlille.sae.classification.controller; - -import javafx.fxml.FXML; -import javafx.scene.control.Button; -import javafx.scene.control.ColorPicker; -import javafx.stage.Stage; - -public class DisplaySettingsController { - @FXML - Stage stage; - - @FXML - Button confirmSettings; - - @FXML - ColorPicker addColor; - - -} diff --git a/src/main/java/fr/univlille/sae/classification/controller/LoadDataController.java b/src/main/java/fr/univlille/sae/classification/controller/LoadDataController.java index 902fb93..934ab41 100644 --- a/src/main/java/fr/univlille/sae/classification/controller/LoadDataController.java +++ b/src/main/java/fr/univlille/sae/classification/controller/LoadDataController.java @@ -4,7 +4,6 @@ import fr.univlille.sae.classification.model.ClassificationModel; import javafx.fxml.FXML; import javafx.scene.control.Alert; import javafx.scene.control.Button; -import javafx.scene.control.Label; import javafx.scene.control.TextField; import javafx.stage.FileChooser; import javafx.stage.Stage; @@ -18,11 +17,6 @@ public class LoadDataController { @FXML Stage stage; - @FXML - Button browseFile; - - @FXML - Button confirmDataSelection; @FXML TextField filePath; @@ -45,7 +39,7 @@ public class LoadDataController { public void validate() throws IOException { - if (file == null) { + if (file == null || file.isDirectory() || !file.exists()) { Alert alert = new Alert(Alert.AlertType.ERROR); alert.setTitle("Erreur de chargement du fichier"); alert.setHeaderText(null); @@ -54,8 +48,8 @@ public class LoadDataController { alert.showAndWait(); openFileChooser(); return; - //throw exception } + ClassificationModel.getClassificationModel().loadData(file); stage.close(); } diff --git a/src/main/java/fr/univlille/sae/classification/controller/MainStageController.java b/src/main/java/fr/univlille/sae/classification/controller/MainStageController.java index bf8ab81..d7d3d6d 100644 --- a/src/main/java/fr/univlille/sae/classification/controller/MainStageController.java +++ b/src/main/java/fr/univlille/sae/classification/controller/MainStageController.java @@ -3,12 +3,10 @@ package fr.univlille.sae.classification.controller; import fr.univlille.sae.classification.model.ClassificationModel; import fr.univlille.sae.classification.view.*; import javafx.fxml.FXML; - -import javafx.scene.chart.*; +import javafx.scene.chart.ScatterChart; import javafx.scene.control.Button; import javafx.scene.control.Label; -import javafx.stage.*; - +import javafx.stage.Stage; import java.io.IOException; @@ -19,20 +17,7 @@ public class MainStageController { @FXML Stage stage; - @FXML - NumberAxis absAxe; - - @FXML - NumberAxis ordAxe; - - @FXML - Button settings; - @FXML - Button loadData; - - @FXML - Button addData; @FXML Button classifyData; @@ -44,7 +29,6 @@ public class MainStageController { Label AxesSelected; - Stage loadStage; private MainStageView mainStageView; /** diff --git a/src/main/java/fr/univlille/sae/classification/model/ClassificationModel.java b/src/main/java/fr/univlille/sae/classification/model/ClassificationModel.java index 8e5f9f1..86d57ff 100644 --- a/src/main/java/fr/univlille/sae/classification/model/ClassificationModel.java +++ b/src/main/java/fr/univlille/sae/classification/model/ClassificationModel.java @@ -3,13 +3,10 @@ package fr.univlille.sae.classification.model; import com.opencsv.bean.CsvToBeanBuilder; import fr.univlille.sae.classification.utils.Observable; -import javax.xml.crypto.Data; import java.io.File; import java.io.IOException; import java.nio.file.Files; -import java.nio.file.Paths; import java.util.*; -import java.util.concurrent.ConcurrentSkipListSet; import java.util.concurrent.CopyOnWriteArrayList; @@ -88,7 +85,7 @@ public class ClassificationModel extends Observable { */ private void classifierDonnee(LoadableData data) { - List<String> classes = new ArrayList<>(data.getClassificationTypes()); + List<String> classes = new ArrayList<>(LoadableData.getClassificationTypes()); Random rdm = new Random(); data.setClassification(classes.get(rdm.nextInt(classes.size()))); notifyObservers(data); diff --git a/src/main/java/fr/univlille/sae/classification/model/Iris.java b/src/main/java/fr/univlille/sae/classification/model/Iris.java index f71fe89..4e66869 100644 --- a/src/main/java/fr/univlille/sae/classification/model/Iris.java +++ b/src/main/java/fr/univlille/sae/classification/model/Iris.java @@ -1,10 +1,8 @@ package fr.univlille.sae.classification.model; -import com.opencsv.bean.*; +import com.opencsv.bean.CsvBindByName; import javafx.scene.paint.Color; -import java.util.Random; - public class Iris extends LoadableData{ @@ -91,13 +89,12 @@ public class Iris extends LoadableData{ } public String[] getAttributesName() { - String[] names = new String[]{ + return new String[]{ "sepalLength", "sepalWidth", "petalLength", "petalWidth" }; - return names; } @Override diff --git a/src/main/java/fr/univlille/sae/classification/model/LoadableData.java b/src/main/java/fr/univlille/sae/classification/model/LoadableData.java index 033890f..745e009 100644 --- a/src/main/java/fr/univlille/sae/classification/model/LoadableData.java +++ b/src/main/java/fr/univlille/sae/classification/model/LoadableData.java @@ -13,10 +13,6 @@ public abstract class LoadableData { } - public void addClassification(String classificationType) { - this.classificationTypes.add(classificationType); - } - public abstract String getClassification() ; public static Set<String> getClassificationTypes() { diff --git a/src/main/java/fr/univlille/sae/classification/view/AddDataView.java b/src/main/java/fr/univlille/sae/classification/view/AddDataView.java index 8b404aa..a840505 100644 --- a/src/main/java/fr/univlille/sae/classification/view/AddDataView.java +++ b/src/main/java/fr/univlille/sae/classification/view/AddDataView.java @@ -1,7 +1,6 @@ package fr.univlille.sae.classification.view; import fr.univlille.sae.classification.controller.AddDataController; -import fr.univlille.sae.classification.controller.AxesSettingsController; import fr.univlille.sae.classification.model.ClassificationModel; import javafx.fxml.FXMLLoader; import javafx.scene.control.Alert; diff --git a/src/main/java/fr/univlille/sae/classification/view/AxesSettingsView.java b/src/main/java/fr/univlille/sae/classification/view/AxesSettingsView.java index 2a1f234..31d9fa2 100644 --- a/src/main/java/fr/univlille/sae/classification/view/AxesSettingsView.java +++ b/src/main/java/fr/univlille/sae/classification/view/AxesSettingsView.java @@ -1,8 +1,6 @@ package fr.univlille.sae.classification.view; import fr.univlille.sae.classification.controller.AxesSettingsController; -import fr.univlille.sae.classification.controller.DataStageController; -import fr.univlille.sae.classification.controller.MainStageController; import fr.univlille.sae.classification.model.ClassificationModel; import fr.univlille.sae.classification.model.LoadableData; import javafx.fxml.FXMLLoader; @@ -10,7 +8,6 @@ import javafx.scene.control.Alert; import javafx.stage.Modality; import javafx.stage.Stage; -import javax.xml.crypto.Data; import java.io.File; import java.io.IOException; import java.net.URL; diff --git a/src/main/java/fr/univlille/sae/classification/view/DataStageView.java b/src/main/java/fr/univlille/sae/classification/view/DataStageView.java index 2cf2f84..1bf77d5 100644 --- a/src/main/java/fr/univlille/sae/classification/view/DataStageView.java +++ b/src/main/java/fr/univlille/sae/classification/view/DataStageView.java @@ -1,19 +1,20 @@ package fr.univlille.sae.classification.view; import fr.univlille.sae.classification.controller.DataStageController; -import fr.univlille.sae.classification.controller.MainStageController; import fr.univlille.sae.classification.model.ClassificationModel; import fr.univlille.sae.classification.model.DataType; import fr.univlille.sae.classification.model.Iris; import fr.univlille.sae.classification.model.LoadableData; import fr.univlille.sae.classification.utils.Observable; import fr.univlille.sae.classification.utils.Observer; +import javafx.collections.ObservableList; import javafx.fxml.FXMLLoader; -import javafx.scene.chart.ScatterChart; import javafx.scene.chart.XYChart; import javafx.scene.control.ContextMenu; import javafx.scene.control.MenuItem; import javafx.scene.shape.Circle; +import javafx.scene.shape.Rectangle; +import javafx.scene.shape.Shape; import javafx.stage.Stage; import java.io.File; @@ -27,10 +28,21 @@ public class DataStageView extends DataVisualizationView implements Observer { private ClassificationModel model; private DataStageController controller; + + private XYChart.Series series1 ; + private XYChart.Series series2 ; + private XYChart.Series series3 ; + private XYChart.Series series4 ; + private Stage root; public DataStageView(ClassificationModel model) { + super(); this.model = model; + this.series1 = new XYChart.Series(); + this.series2 = new XYChart.Series(); + this.series3 = new XYChart.Series(); + this.series4 = new XYChart.Series(); model.attach(this); } @@ -52,6 +64,12 @@ public class DataStageView extends DataVisualizationView implements Observer { controller = loader.getController(); controller.setDataStageView(this); scatterChart = controller.getScatterChart(); + + scatterChart.getData().addAll(series4, series1, series2, series3 ); + + + + System.out.println("DataStageView scatter chart: " +scatterChart); controller.setAxesSelected("Aucun fichier sélectionné"); if (!model.getDatas().isEmpty()) { @@ -64,10 +82,10 @@ public class DataStageView extends DataVisualizationView implements Observer { if(scatterChart == null) throw new IllegalStateException(); if(!(observable instanceof ClassificationModel)) throw new IllegalStateException(); //on vide le nuage pour s'assurer que celui-ci est bien vide - scatterChart.getData().clear(); + ObservableList<XYChart.Series> series = scatterChart.getData(); + for(XYChart.Series serie: series) {serie.getData().clear();} + - XYChart.Series series1 = new XYChart.Series(); - series1.setName("Iris"); //Jalon 1: on verifie que le type de donnée est bien IRIS if(model.getType() == DataType.IRIS) { @@ -76,8 +94,6 @@ public class DataStageView extends DataVisualizationView implements Observer { } else{ controller.setAxesSelected(""); - // On ajoute la serie au nuage - scatterChart.getData().add(series1); //On recupere les données du model List<LoadableData> points = new ArrayList<>(model.getDatas()); @@ -89,9 +105,29 @@ public class DataStageView extends DataVisualizationView implements Observer { XYChart.Data<Double, Double> dataPoint = new XYChart.Data<>(iris.getDataType(actualX), iris.getDataType(actualY)); - dataPoint.setNode(getCircle(iris)); - - series1.getData().add(dataPoint); + dataPoint.setNode(getForm(iris, new Circle(5))); + + switch (iris.getClassification()) { + case "Setosa": + series1.getData().add(dataPoint); + break; + case "Versicolor": + series2.getData().add(dataPoint); + break; + case "Virginica": + series3.getData().add(dataPoint); + break; + default: + dataPoint.setNode(getForm(iris, new Rectangle(10, 10))); + series4.getData().add(dataPoint); + break; + } + + + series1.setName("Setosa"); + series2.setName("Versicolor"); + series3.setName("Virginica"); + series4.setName("undefinied"); } } @@ -99,10 +135,9 @@ public class DataStageView extends DataVisualizationView implements Observer { } - private Circle getCircle(Iris iris) { - Circle circle = new Circle(5); - circle.setFill(iris.getColor()); - circle.setOnMouseClicked(e -> { + private Shape getForm(Iris iris, Shape form) { + form.setFill(iris.getColor()); + form.setOnMouseClicked(e -> { ContextMenu contextMenu = new ContextMenu(); for(String attributes : iris.getAttributesName()) { contextMenu.getItems().add(new MenuItem(attributes + " : " + iris.getDataType(attributes))); @@ -110,7 +145,7 @@ public class DataStageView extends DataVisualizationView implements Observer { contextMenu.show(root, e.getScreenX(), e.getScreenY()); }); - return circle; + return form; } @@ -130,10 +165,9 @@ public class DataStageView extends DataVisualizationView implements Observer { iris.getDataType(actualY) ); - dataPoint.setNode(getCircle(iris)); + dataPoint.setNode(getForm(iris, new Rectangle(10, 10))); if (!scatterChart.getData().isEmpty()) { - XYChart.Series series = (XYChart.Series) scatterChart.getData().get(0); - series.getData().add(dataPoint); + series4.getData().add(dataPoint); } } } diff --git a/src/main/java/fr/univlille/sae/classification/view/MainStageView.java b/src/main/java/fr/univlille/sae/classification/view/MainStageView.java index 11a4f6a..1eb8794 100644 --- a/src/main/java/fr/univlille/sae/classification/view/MainStageView.java +++ b/src/main/java/fr/univlille/sae/classification/view/MainStageView.java @@ -1,6 +1,5 @@ package fr.univlille.sae.classification.view; -import fr.univlille.sae.classification.controller.LoadDataController; import fr.univlille.sae.classification.controller.MainStageController; import fr.univlille.sae.classification.model.ClassificationModel; import fr.univlille.sae.classification.model.DataType; @@ -8,13 +7,12 @@ import fr.univlille.sae.classification.model.Iris; import fr.univlille.sae.classification.model.LoadableData; import fr.univlille.sae.classification.utils.Observable; import fr.univlille.sae.classification.utils.Observer; -import javafx.application.Application; -import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; -import javafx.scene.chart.ScatterChart; import javafx.scene.chart.XYChart; -import javafx.scene.control.*; -import javafx.scene.paint.Color; +import javafx.scene.control.Alert; +import javafx.scene.control.ButtonType; +import javafx.scene.control.ContextMenu; +import javafx.scene.control.MenuItem; import javafx.scene.shape.Circle; import javafx.scene.shape.Rectangle; import javafx.scene.shape.Shape; @@ -23,7 +21,9 @@ import javafx.stage.Stage; import java.io.File; import java.io.IOException; import java.net.URL; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; public class MainStageView extends DataVisualizationView implements Observer { @@ -32,7 +32,9 @@ public class MainStageView extends DataVisualizationView implements Observer { private Stage root; + public MainStageView(ClassificationModel model) { + super(); this.model = model; model.attach(this); } @@ -68,7 +70,10 @@ public class MainStageView extends DataVisualizationView implements Observer { loader.getController(); controller = loader.getController(); controller.setMainStageView(this); + scatterChart = controller.getScatterChart(); + + System.out.println("DataStageView scatter chart: " +scatterChart ); controller.setAxesSelected("Aucun fichier sélectionné"); } @@ -83,6 +88,7 @@ public class MainStageView extends DataVisualizationView implements Observer { XYChart.Series series1 = new XYChart.Series(); XYChart.Series series2 = new XYChart.Series(); XYChart.Series series3 = new XYChart.Series(); + XYChart.Series series4 = new XYChart.Series(); @@ -106,12 +112,19 @@ public class MainStageView extends DataVisualizationView implements Observer { dataPoint.setNode(getForm(iris, new Circle(5))); - if(iris.getClassification().equals("Setosa")){ - series1.getData().add(dataPoint); - }else if(iris.getClassification().equals("Versicolor")){ - series2.getData().add(dataPoint); - }else if(iris.getClassification().equals("Virginica")){ - series3.getData().add(dataPoint); + switch (iris.getClassification()) { + case "Setosa": + series1.getData().add(dataPoint); + break; + case "Versicolor": + series2.getData().add(dataPoint); + break; + case "Virginica": + series3.getData().add(dataPoint); + break; + default: + series4.getData().add(dataPoint); + break; } } @@ -119,8 +132,9 @@ public class MainStageView extends DataVisualizationView implements Observer { series1.setName("Setosa"); series2.setName("Versicolor"); series3.setName("Virginica"); + series4.setName("undefinied"); - scatterChart.getData().addAll(series1, series2, series3); + scatterChart.getData().addAll(series1, series2, series3, series4); } } } -- GitLab