From 02d29a978b9a49f2c7d23d5e845eeda23be362ba Mon Sep 17 00:00:00 2001 From: Numbtus <matias.mennecart.etu@univ-lille.fr> Date: Fri, 29 Nov 2024 21:06:14 +0100 Subject: [PATCH] Fix exception while trying to write text into double or integer spinner --- .../controller/AddDataController.java | 63 ++++++++++++++++--- .../classification/model/PointFactory.java | 1 + 2 files changed, 54 insertions(+), 10 deletions(-) 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 4d38f1f..b59ca6d 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 63a1bc9..8ad7826 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; /** -- GitLab