diff --git a/res/stages/axes-settings-stage.fxml b/res/stages/axes-settings-stage.fxml index 8fb6b84d1748b83d03cb6f3cce523ab8ab62d8c8..3fa1c37d951e26a6260c46fa7abacff1d3acf58b 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 d35ef9f91c85c1046cf1121f04f2e5d7867e7975..4eaff3a517f37cf2129ee0f95c841f2182c4ff82 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 d32296897275d3818030eeb4d0d56a5d10b3403e..0aed70e5abdea929c40be058218372ad18055bf2 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 0679ea9492f13d56af8c055656812f6c766632ab..4d46b665df7f0e25db3c4ee6ba42c65c302e169f 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 965120d3f60d7961f4d6bd46cb23c3940e8d3915..cf27808e0137d14171c71ffaa2153cc07ff6cd8c 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 43599c8041b94d95e3569264fc937c30a3d38c7d..aa6fa2006c9789487fdd62df4a5394c1d64f20cf 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 b878ee7cd2d8b6b442f05744f5f5c20e33618953..b581562f7ead46a3650364f1d033b89e6cf4d98a 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 629f3b67653ce742a3e9647cd784c4f04c4f04b3..8d4d2c0e60e9f6f8ae667506c7d8a83257f40dad 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 27678aa908bde366122bbce5e0f6351eb4e2a5f5..3e4743db17e065f2c8644084bb54d8ad14eeadd3 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 0000000000000000000000000000000000000000..d5cc72fb9ca2601314228f8f4a32f204730fd7a1 --- /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 7d3163b7987b6c46bee2ace35d683b6d1de5bbd6..4a74452b4b16edf17f1847ec391fd8e74c31388b 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; + } }