user1285928
user1285928

Reputation: 1476

Update validator

I'm using this code to validate TextField for network port.

fieldNport.textProperty().addListener(new ChangeListener<String>()
{
    @Override
    public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue)
    {
        IpAddressNameValidator.hide();
        if (!newValue.matches("-?\\d+(\\.\\d+)?"))
        {
            MenuItem cc = new MenuItem(newValue + " is not correct network port");
            cc.getStyleClass().add("validator-item");
            IpAddressNameValidator.getItems().clear();
            IpAddressNameValidator.getItems().add(cc);
            IpAddressNameValidator.show(fieldNport, Side.RIGHT, 10, 0);
        }
    }
});

I noticed that the validator is not updated when I delete the old value with backspace. The only solution that I found is this IpAddressNameValidator.hide(); and then show the validator message again.

I there other way to refresh the validator message when I add or remove values? This solution works but the message is blinking when I add new values.

Upvotes: 0

Views: 42

Answers (1)

Jurgen
Jurgen

Reputation: 2154

Every time the text changes and the regex expression matches then you are unnecessarily recreating the MenuItem etc. Rather do it like this:

fieldNport.textProperty().addListener(new ChangeListener<String>()
{
    private MenuItem cc = new MenuItem();
    {
        cc.getStyleClass().add("validator-item");
        ipAddressNameValidator.getItems().clear();
        ipAddressNameValidator.getItems().add(cc);
    }

    @Override
    public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue)
    {
        if (!newValue.matches("-?\\d+(\\.\\d+)?"))
        {
            if ( ! ipAddressNameValidator.isShowing() )
            {
                ipAddressNameValidator.show(fieldNport, Side.RIGHT, 10, 0);
            }
            cc.setText( newValue + " is not correct network port" );
        }
    }
});

Upvotes: 1

Related Questions