Featured Post

Applying Email Validation to a JavaFX TextField Using Binding

This example uses the same controller as in a previous post but adds a use case to support email validation.  A Commons Validator object is ...

Tuesday, September 13, 2016

Applying Email Validation to a JavaFX TextField Using Binding

This example uses the same controller as in a previous post but adds a use case to support email validation.  A Commons Validator object is used to apply the email validation rules to a TextField.  This is hooked in to the JavaFX program using a compound Binding expression.


The previous post shows the Scene Builder and a video demo.  The previous post allowed invalid email as it's purpose was to demonstrate equality between the two TextFields.  That input is no longer supported.  Rather, the email TextFields must contain a valid email, something of the form "user@host.com".

Here is a demo of the re-worked functionality.


First, I add the Commons Validator to my Gradle project.

    compile group: 'commons-validator', name: 'commons-validator', version: '1.4.0'

Next, in the initialize() method, I create a Commons Validator object.

        EmailValidator emailValidator = EmailValidator.getInstance();

I then create a StringBinding.  The StringBinding will return the input if the input adheres to the Commons Validator rules.  If the rules are not followed, the empty string is returned. For example, entering "javafx@example.com" would return "javafx@example.com" while simply "javafx" would return "".

        StringBinding validEmailExpr = Bindings.createStringBinding(
                () -> emailValidator.isValid(txtEmail.getText())?txtEmail.getText():"",
                txtEmail.textProperty()
        );

The Callback argument does the rule check.  The txtEmail.textProperty() argument is the "trigger" that will make this check called for each and every change of txtEmail.

This allows me to leverage the isEqualTo() method on the txtEmail TextField.  If the input matches the returned validation value, that clause will pass.  Otherwise, that clause will not be met.  The special case of an empty value in the TextField matching an empty value returned from the StringBinding is handled with the isEmpty() clause of the compound expression.

Finally, here is the compound Binding expression.

        btnSave.disableProperty().bind(
            txtEmail.textProperty().isEqualTo(txtConfirmEmail.textProperty()).not()
                .or(
                    txtEmail.textProperty().isEqualTo( validEmailExpr ).not()
                )
                .or(
                    txtEmail.textProperty().isEmpty()
                )
        );

1 comment:

  1. Great insights on company formation and legal compliance requirements for new businesses in India. Many entrepreneurs often feel confused about the rules related to public company minimum members and the documentation required for proper registration. For business owners planning to establish a public company, understanding these legal requirements is extremely important before starting operations. Taxlegit offers professional assistance with company registration, GST filing, and complete tax compliance services. With Taxlegit, businesses receive proper guidance, accurate documentation support, and smooth compliance management for long-term growth and stability.

    ReplyDelete