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 4d38f1f0d7b078b7a5511cae8186bc47f2b122cf..b59ca6dcd6bf07c8762a510dbb938a0a8c65928b 100644 --- a/src/main/java/fr/univlille/sae/classification/controller/AddDataController.java +++ b/src/main/java/fr/univlille/sae/classification/controller/AddDataController.java @@ -12,11 +12,11 @@ import javafx.stage.Stage; import java.io.IOException; import java.lang.reflect.Array; +import java.text.ParseException; import java.time.temporal.Temporal; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.function.UnaryOperator; +import java.util.regex.Pattern; /** * Controlleur pour le FXML add-data-stage, pour ajouter une nouvelle donnée @@ -67,6 +67,22 @@ public class AddDataController { 0.5 ); doubleSpinner.setValueFactory(valueFactory); + + TextField editor = doubleSpinner.getEditor(); + + // On bloque la siasi de texte autre que des chiffres dans le spinner + Pattern validDoublePattern = Pattern.compile("-?\\d*(\\.\\d*)?"); + UnaryOperator<TextFormatter.Change> filter = change -> { + String newText = change.getControlNewText(); + if (validDoublePattern.matcher(newText).matches()) { + return change; + } + return null; + }; + + TextFormatter<String> textFormatter = new TextFormatter<>(filter); + editor.setTextFormatter(textFormatter); + hbox.getChildren().add(doubleSpinner); components.add(doubleSpinner); } @@ -81,6 +97,22 @@ public class AddDataController { 1 ); integerSpinner.setValueFactory(valueFactory); + + TextField editor = integerSpinner.getEditor(); + + Pattern validIntegerPattern = Pattern.compile("-?\\d*"); + UnaryOperator<TextFormatter.Change> filter = change -> { + String newText = change.getControlNewText(); + if (validIntegerPattern.matcher(newText).matches()) { + return change; + } + return null; + }; + + // Appliquer le TextFormatter au TextField du Spinner + TextFormatter<String> textFormatter = new TextFormatter<>(filter); + editor.setTextFormatter(textFormatter); + hbox.getChildren().add(integerSpinner); components.add(integerSpinner); } @@ -130,16 +162,27 @@ public class AddDataController { return null; }).toArray(); + System.out.println("State in"); + System.out.println(Arrays.toString(values)); ClassificationModel.getClassificationModel().ajouterDonnee(values); - }catch (IllegalArgumentException e){ - Alert alert = new Alert(Alert.AlertType.ERROR); - alert.setTitle("Erreur"); - alert.setHeaderText(null); - alert.setContentText(e.getMessage()); - alert.showAndWait(); + }catch (NumberFormatException e) { + openErrorStage(e, "Erreur, les données ne respecte pas le format specifié"); + }catch (IllegalArgumentException e) { + openErrorStage(e); } stage.close(); } + private void openErrorStage(Exception e, String message) { + Alert alert = new Alert(Alert.AlertType.ERROR); + alert.setTitle("Erreur - " + e.getClass()); + alert.setHeaderText(null); + alert.setContentText(message); + alert.showAndWait(); + } + + private void openErrorStage(Exception e) { + openErrorStage(e, e.getMessage()); + } } diff --git a/src/main/java/fr/univlille/sae/classification/model/PointFactory.java b/src/main/java/fr/univlille/sae/classification/model/PointFactory.java index 63a1bc9c834ef4beeb0636bfd5a4d9bbcf45e437..8ad78269be099af7cd9fe955b22a6b679fba5f5d 100644 --- a/src/main/java/fr/univlille/sae/classification/model/PointFactory.java +++ b/src/main/java/fr/univlille/sae/classification/model/PointFactory.java @@ -1,5 +1,6 @@ package fr.univlille.sae.classification.model; +import java.text.ParseException; import java.util.Arrays; /**