From c38bb24e94a6c301179715f559ca8d86c62aa651 Mon Sep 17 00:00:00 2001 From: Alex <78383757+Lextical@users.noreply.github.com> Date: Mon, 13 Apr 2026 21:52:53 -0600 Subject: [PATCH] fixed phone validation desktop --- .../org/example/petshopdesktop/Validator.java | 8 +-- .../StaffEditDialogController.java | 6 ++ .../StaffRegisterDialogController.java | 6 ++ .../SupplierDialogController.java | 3 + .../util/TextFieldFormatSupport.java | 55 +++++++++++++++++++ 5 files changed, 74 insertions(+), 4 deletions(-) create mode 100644 desktop/src/main/java/org/example/petshopdesktop/util/TextFieldFormatSupport.java diff --git a/desktop/src/main/java/org/example/petshopdesktop/Validator.java b/desktop/src/main/java/org/example/petshopdesktop/Validator.java index 2940cde4..1a453556 100644 --- a/desktop/src/main/java/org/example/petshopdesktop/Validator.java +++ b/desktop/src/main/java/org/example/petshopdesktop/Validator.java @@ -183,7 +183,7 @@ public class Validator { } /** - * Checks if the input is a valid phone number in format XXX-XXX-XXXX + * Checks if the input is a valid phone number in format (XXX) XXX-XXXX * @param value input of string * @param name name of input * @return error msg if input is not in valid phone format, otherwise empty @@ -191,14 +191,14 @@ public class Validator { public static String isValidPhoneNumber(String value, String name){ String msg = ""; if (value == null) { - msg += name + " must be in format XXX-XXX-XXXX. \n"; + msg += name + " must be in format (XXX) XXX-XXXX. \n"; return msg; } - String regex = "^\\d{3}-\\d{3}-\\d{4}$"; + String regex = "^\\(\\d{3}\\) \\d{3}-\\d{4}$"; if (!value.matches(regex)){ - msg += name + " must be in format XXX-XXX-XXXX. \n"; + msg += name + " must be in format (XXX) XXX-XXXX. \n"; } return msg; diff --git a/desktop/src/main/java/org/example/petshopdesktop/controllers/dialogcontrollers/StaffEditDialogController.java b/desktop/src/main/java/org/example/petshopdesktop/controllers/dialogcontrollers/StaffEditDialogController.java index 8b88e98f..45dd6dae 100644 --- a/desktop/src/main/java/org/example/petshopdesktop/controllers/dialogcontrollers/StaffEditDialogController.java +++ b/desktop/src/main/java/org/example/petshopdesktop/controllers/dialogcontrollers/StaffEditDialogController.java @@ -15,6 +15,7 @@ import org.example.petshopdesktop.api.endpoints.UserApi; import org.example.petshopdesktop.api.endpoints.CustomerApi; import org.example.petshopdesktop.auth.UserSession; import org.example.petshopdesktop.util.ActivityLogger; +import org.example.petshopdesktop.util.TextFieldFormatSupport; public class StaffEditDialogController { @@ -47,6 +48,11 @@ public class StaffEditDialogController { private UserResponse user; + @FXML + void initialize() { + TextFieldFormatSupport.applyPhoneNumberFormat(txtPhone); + } + public void setUser(UserResponse user) { this.user = user; String fullName = user.getFullName() == null ? "" : user.getFullName(); diff --git a/desktop/src/main/java/org/example/petshopdesktop/controllers/dialogcontrollers/StaffRegisterDialogController.java b/desktop/src/main/java/org/example/petshopdesktop/controllers/dialogcontrollers/StaffRegisterDialogController.java index b50d1789..91208a70 100644 --- a/desktop/src/main/java/org/example/petshopdesktop/controllers/dialogcontrollers/StaffRegisterDialogController.java +++ b/desktop/src/main/java/org/example/petshopdesktop/controllers/dialogcontrollers/StaffRegisterDialogController.java @@ -15,6 +15,7 @@ import org.example.petshopdesktop.api.endpoints.CustomerApi; import org.example.petshopdesktop.auth.UserSession; import org.example.petshopdesktop.Validator; import org.example.petshopdesktop.util.ActivityLogger; +import org.example.petshopdesktop.util.TextFieldFormatSupport; public class StaffRegisterDialogController { @@ -45,6 +46,11 @@ public class StaffRegisterDialogController { @FXML private Button btnCreate; + @FXML + void initialize() { + TextFieldFormatSupport.applyPhoneNumberFormat(txtPhone); + } + @FXML void btnCreateClicked(ActionEvent event) { lblError.setText(""); diff --git a/desktop/src/main/java/org/example/petshopdesktop/controllers/dialogcontrollers/SupplierDialogController.java b/desktop/src/main/java/org/example/petshopdesktop/controllers/dialogcontrollers/SupplierDialogController.java index 8b61daca..44131a6c 100644 --- a/desktop/src/main/java/org/example/petshopdesktop/controllers/dialogcontrollers/SupplierDialogController.java +++ b/desktop/src/main/java/org/example/petshopdesktop/controllers/dialogcontrollers/SupplierDialogController.java @@ -15,6 +15,7 @@ import org.example.petshopdesktop.api.dto.supplier.SupplierResponse; import org.example.petshopdesktop.api.endpoints.SupplierApi; import org.example.petshopdesktop.models.Supplier; import org.example.petshopdesktop.util.ActivityLogger; +import org.example.petshopdesktop.util.TextFieldFormatSupport; public class SupplierDialogController { @@ -52,6 +53,8 @@ public class SupplierDialogController { */ @FXML void initialize() { + TextFieldFormatSupport.applyPhoneNumberFormat(txtPhone); + //Set up mouse handlers for buttons btnSave.setOnMouseClicked(new EventHandler() { @Override diff --git a/desktop/src/main/java/org/example/petshopdesktop/util/TextFieldFormatSupport.java b/desktop/src/main/java/org/example/petshopdesktop/util/TextFieldFormatSupport.java new file mode 100644 index 00000000..7dba0d9f --- /dev/null +++ b/desktop/src/main/java/org/example/petshopdesktop/util/TextFieldFormatSupport.java @@ -0,0 +1,55 @@ +package org.example.petshopdesktop.util; + +import javafx.application.Platform; +import javafx.scene.control.TextField; +import javafx.scene.control.TextFormatter; + +import java.util.function.UnaryOperator; + +public class TextFieldFormatSupport { + + /** + * Applies a phone number formatter to a TextField. + * The formatter only allows digits and automatically formats the input as (XXX) XXX-XXXX. + * + * @param textField The TextField to apply the formatter to. + */ + public static void applyPhoneNumberFormat(TextField textField) { + textField.textProperty().addListener((observable, oldValue, newValue) -> { + if (newValue == null) return; + + // Remove all non-digit characters + String digits = newValue.replaceAll("\\D", ""); + + // Limit to 10 digits + if (digits.length() > 10) { + digits = digits.substring(0, 10); + } + + StringBuilder formatted = new StringBuilder(); + int len = digits.length(); + + if (len > 0) { + formatted.append("("); + if (len <= 3) { + formatted.append(digits); + } else { + formatted.append(digits, 0, 3).append(") "); + if (len <= 6) { + formatted.append(digits.substring(3)); + } else { + formatted.append(digits, 3, 6).append("-").append(digits.substring(6)); + } + } + } + + String result = formatted.toString(); + if (!result.equals(newValue)) { + Platform.runLater(() -> { + textField.setText(result); + textField.positionCaret(result.length()); + }); + } + }); + } +}