From b5812879c1ef5fa80669d7ae20618deb7603440e Mon Sep 17 00:00:00 2001 From: "hugo.debuyser.etu" <hugo.debuyser.etu@univ-lille.fr> Date: Mon, 21 Oct 2024 21:37:34 +0200 Subject: [PATCH] =?UTF-8?q?Modifications=20de=20fichiers=20FXML=20et=20ajo?= =?UTF-8?q?ut=20de=20la=20fonctionnalit=C3=A9=20pour=20modifier=20les=20ax?= =?UTF-8?q?es=20sur=20une=20vue?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- res/stages/axes-settings-stage.fxml | 2 +- res/stages/data-view-stage.fxml | 3 +- res/stages/main-stage.fxml | 15 ++++- .../controller/AxesSettingsController.java | 31 +++++++++- .../controller/LoadDataController.java | 5 -- .../controller/MainStageController.java | 11 +++- .../model/ClassificationModel.java | 3 +- .../sae/classification/model/Iris.java | 28 ++++++++++ .../classification/model/LoadableData.java | 2 + .../classification/view/AxesSettingsView.java | 56 +++++++++++++++++++ .../classification/view/MainStageView.java | 36 +++++++++--- 11 files changed, 171 insertions(+), 21 deletions(-) create mode 100644 src/main/java/fr/univlille/sae/classification/view/AxesSettingsView.java diff --git a/res/stages/axes-settings-stage.fxml b/res/stages/axes-settings-stage.fxml index 8fb6b84..3fa1c37 100644 --- a/res/stages/axes-settings-stage.fxml +++ b/res/stages/axes-settings-stage.fxml @@ -24,7 +24,7 @@ <ChoiceBox fx:id="selectAbs" prefWidth="150.0" /> </children> </HBox> - <Button fx:id="confirmAxes" mnemonicParsing="false" text="Valider" /> + <Button fx:id="confirmAxes" onAction="#validate" mnemonicParsing="false" text="Valider" /> </children> </VBox> </children></AnchorPane> diff --git a/res/stages/data-view-stage.fxml b/res/stages/data-view-stage.fxml index d35ef9f..4eaff3a 100644 --- a/res/stages/data-view-stage.fxml +++ b/res/stages/data-view-stage.fxml @@ -35,7 +35,8 @@ </graphic> <HBox.margin> <Insets right="10.0" top="30.0" /> - </HBox.margin></Button> + </HBox.margin> + </Button> </children> </HBox> </children> diff --git a/res/stages/main-stage.fxml b/res/stages/main-stage.fxml index d322968..0aed70e 100644 --- a/res/stages/main-stage.fxml +++ b/res/stages/main-stage.fxml @@ -6,6 +6,9 @@ <?import javafx.scene.layout.*?> <?import javafx.stage.*?> +<?import javafx.scene.image.ImageView?> +<?import javafx.geometry.Insets?> +<?import javafx.scene.image.Image?> <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.MainStageController"> <scene> <Scene> @@ -24,7 +27,17 @@ <NumberAxis fx:id="ordAxe" side="LEFT" /> </yAxis> </ScatterChart> - <Button fx:id="settings" mnemonicParsing="false" text="Réglage" /> + <Button fx:id="settingsView" onAction="#openAxesSetting" mnemonicParsing="false"> + <graphic> + <ImageView fitHeight="100.0" fitWidth="30.0" pickOnBounds="true" preserveRatio="true"> + <image> + <Image url="@gear.png" /> + </image></ImageView> + </graphic> + <HBox.margin> + <Insets right="10.0" top="30.0" /> + </HBox.margin> + </Button> </children> </HBox> <HBox alignment="CENTER" prefHeight="169.0" prefWidth="691.0" spacing="50.0"> 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 0679ea9..4d46b66 100644 --- a/src/main/java/fr/univlille/sae/classification/controller/AxesSettingsController.java +++ b/src/main/java/fr/univlille/sae/classification/controller/AxesSettingsController.java @@ -1,10 +1,16 @@ package fr.univlille.sae.classification.controller; +import fr.univlille.sae.classification.view.MainStageView; import javafx.fxml.FXML; import javafx.scene.control.Button; import javafx.scene.control.ChoiceBox; +import javafx.stage.Stage; + + +public class AxesSettingsController{ + @FXML + Stage stage; -public class AxesSettingsController { @FXML ChoiceBox selectOrd; @@ -13,4 +19,27 @@ public class AxesSettingsController { @FXML Button confirmAxes; + + MainStageView mainStageView; + + public void setSelectOrd(String[] fields){ + selectOrd.getItems().clear(); + selectOrd.getItems().addAll(fields); + } + + public void setSelectAbs(String[] fields){ + selectAbs.getItems().clear(); + selectAbs.getItems().addAll(fields); + } + + public void setMainStageView(MainStageView mainStageView) { + this.mainStageView = mainStageView; + } + + public void validate(){ + mainStageView.setActualX(selectAbs.getValue().toString()); + mainStageView.setActualY(selectOrd.getValue().toString()); + mainStageView.update(mainStageView.getModel()); + stage.close(); + } } 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 965120d..cf27808 100644 --- a/src/main/java/fr/univlille/sae/classification/controller/LoadDataController.java +++ b/src/main/java/fr/univlille/sae/classification/controller/LoadDataController.java @@ -30,15 +30,12 @@ public class LoadDataController { public void loadData() { - System.out.println("Loading data"); stage.close(); - } public void openFileChooser() { - FileChooser fileChooser = new FileChooser(); fileChooser.setTitle("Choisissez le fichier à importer"); this.file = fileChooser.showOpenDialog(stage); @@ -47,8 +44,6 @@ public class LoadDataController { filePath.setText(file.getPath()); } - - } public void validate() throws IOException { 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 43599c8..aa6fa20 100644 --- a/src/main/java/fr/univlille/sae/classification/controller/MainStageController.java +++ b/src/main/java/fr/univlille/sae/classification/controller/MainStageController.java @@ -1,7 +1,9 @@ package fr.univlille.sae.classification.controller; import fr.univlille.sae.classification.model.ClassificationModel; +import fr.univlille.sae.classification.view.AxesSettingsView; import fr.univlille.sae.classification.view.LoadDataView; +import fr.univlille.sae.classification.view.MainStageView; import fr.univlille.sae.classification.view.AddDataView; import javafx.fxml.FXML; @@ -42,17 +44,24 @@ public class MainStageController { Stage loadStage; + private MainStageView mainStageView; /** * 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, mainStageView); + axesSettingsView.show(); + } + public void setMainStageView(MainStageView mainStageView) { + this.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 b878ee7..b581562 100644 --- a/src/main/java/fr/univlille/sae/classification/model/ClassificationModel.java +++ b/src/main/java/fr/univlille/sae/classification/model/ClassificationModel.java @@ -19,9 +19,9 @@ public class ClassificationModel extends Observable { private DataType type; - private static ClassificationModel model; + /** * Renvoie une instance unique du model. Par default le type de ce modele est Iris. * Modifier en .setType(DataType). @@ -102,7 +102,6 @@ public class ClassificationModel extends Observable { return dataToClass; } - public DataType getType() { return type; } 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 629f3b6..8d4d2c0 100644 --- a/src/main/java/fr/univlille/sae/classification/model/Iris.java +++ b/src/main/java/fr/univlille/sae/classification/model/Iris.java @@ -46,6 +46,34 @@ public class Iris extends LoadableData{ return petalLength; } + public double getDataType(String axes){ + if(axes==null){ + return sepalWidth; + } + switch (axes){ + case "sepalWidth": + return sepalWidth; + case "sepalLength": + return sepalLength; + case "petalWidth": + return petalWidth; + case "petalLength": + return petalLength; + default: + return sepalLength; + } + } + + public String[] getAttributesName() { + String[] names = new String[]{ + "sepalWidth", + "sepalLength", + "petalWidth", + "petalLength" + }; + return names; + } + @Override public String toString() { return "Iris{" + 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 27678aa..3e4743d 100644 --- a/src/main/java/fr/univlille/sae/classification/model/LoadableData.java +++ b/src/main/java/fr/univlille/sae/classification/model/LoadableData.java @@ -27,4 +27,6 @@ public abstract class LoadableData { this.classification = classification; } + public abstract String[] getAttributesName(); + } diff --git a/src/main/java/fr/univlille/sae/classification/view/AxesSettingsView.java b/src/main/java/fr/univlille/sae/classification/view/AxesSettingsView.java new file mode 100644 index 0000000..d5cc72f --- /dev/null +++ b/src/main/java/fr/univlille/sae/classification/view/AxesSettingsView.java @@ -0,0 +1,56 @@ +package fr.univlille.sae.classification.view; + +import fr.univlille.sae.classification.controller.AxesSettingsController; +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; +import javafx.stage.Modality; +import javafx.stage.Stage; + +import java.io.File; +import java.io.IOException; +import java.net.URL; + +public class AxesSettingsView { + + + private ClassificationModel model; + private Stage owner; + private MainStageView mainStageView; + + public AxesSettingsView(ClassificationModel model, Stage owner, MainStageView mainStageView){ + this.model = model; + this.owner = owner; + this.mainStageView = mainStageView; + } + + public void show() throws IOException { + + FXMLLoader loader = new FXMLLoader(); + URL fxmlFileUrl = new File(System.getProperty("user.dir") + File.separator + "res" + File.separator + "stages" + File.separator + "axes-settings-stage.fxml").toURI().toURL(); + + if (fxmlFileUrl == null) { + System.out.println("Impossible de charger le fichier fxml"); + System.exit(-1); + } + loader.setLocation(fxmlFileUrl); + Stage root = loader.load(); + + root.setResizable(false); + root.initOwner(owner); + root.initModality(Modality.APPLICATION_MODAL); + root.setTitle("Configuration des axes"); + AxesSettingsController controller = loader.getController(); + + LoadableData dataType = model.getDatas().get(0); + + controller.setMainStageView(mainStageView); + + controller.setSelectAbs(dataType.getAttributesName()); + controller.setSelectOrd(dataType.getAttributesName()); + + root.showAndWait(); + + } +} 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 7d3163b..4a74452 100644 --- a/src/main/java/fr/univlille/sae/classification/view/MainStageView.java +++ b/src/main/java/fr/univlille/sae/classification/view/MainStageView.java @@ -21,13 +21,12 @@ import java.net.URL; public class MainStageView implements Observer { - - - private ClassificationModel model; - private ScatterChart scatterChart; + private String actualX; + private String actualY; + public MainStageView(ClassificationModel model) { this.model = model; model.attach(this); @@ -50,6 +49,7 @@ public class MainStageView implements Observer { root.show(); loader.getController(); MainStageController controller = loader.getController(); + controller.setMainStageView(this); scatterChart = controller.getScatterChart(); } @@ -58,23 +58,41 @@ public class MainStageView implements Observer { @Override public void update(Observable observable) { if(scatterChart == null) throw new IllegalStateException(); + scatterChart.getData().clear(); if(!(observable instanceof ClassificationModel)) throw new IllegalStateException(); XYChart.Series series1 = new XYChart.Series(); series1.setName("Dice Launch"); scatterChart.getData().add(series1); for(LoadableData i : model.getDatas()) { if(model.getType() == DataType.IRIS) { - series1.getData().add(new XYChart.Data<>(((Iris)i).getPetalLength(), - ((Iris)i).getPetalWidth())); - + series1.getData().add(new XYChart.Data<>(((Iris)i).getDataType(actualX), + ((Iris)i).getDataType(actualY))); } } - - } @Override public void update(Observable observable, Object data) { } + + public String getActualX() { + return actualX; + } + + public String getActualY() { + return actualY; + } + + public void setActualX(String actualX) { + this.actualX = actualX; + } + + public void setActualY(String actualY) { + this.actualY = actualY; + } + + public Observable getModel() { + return this.model; + } } -- GitLab