Как заставить TextFormatter работать, только если поле в фокусе? - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть TextFormatter:

mailTextField.setTextFormatter(new TextFormatter<>(change -> {
    int maxLength = 100;

    if (change.isAdded()) {
        if(change.getControlNewText().length()>maxLength){
            if(change.getText().length()==1){
                change = null;
                System.out.println("Reached max!");
            }else{
                int allowedLength = maxLength - change.getControlText().length();
                change.setText(change.getText().substring(0, allowedLength));
                System.out.println("Cut paste!");
            }
        }

        if(change!=null){
            System.out.println("Mail check: "+change.getControlNewText());
            if(Validation.mail(change.getControlNewText())){
                showCorrectIcon(mailTextField);
                }else{
                showErrorIcon(mailTextField);
            }
        }
    }
    return change;
}));

Поскольку исходное письмо хранится в базе данных, я не хочу показывать правильный значок для него, но только если пользователь пытается его настроить. Можно ли заставить TextFormatter работать только в том случае, если почтовое поле находится в фокусе?

1 Ответ

0 голосов
/ 27 апреля 2018

Вы можете использовать функцию isFocused(): https://docs.oracle.com/javase/8/javafx/api/javafx/scene/Node.html#isFocused--

В начале вашего TextFormatter вы можете сделать:

if (!mailTextField.isFocused()) {
    return change;
}

Полный пример:

mailTextField.setTextFormatter(new TextFormatter<>(change -> {
    if (!mailTextField.isFocused()) {
        return change;
    }

    int maxLength = 100;

    if (change.isAdded()) {
        if(change.getControlNewText().length()>maxLength){
            if(change.getText().length()==1){
                change = null;
                System.out.println("Reached max!");
            }else{
                int allowedLength = maxLength - change.getControlText().length();
                change.setText(change.getText().substring(0, allowedLength));
                System.out.println("Cut paste!");
            }
        }

        if(change!=null){
            System.out.println("Mail check: "+change.getControlNewText());
            if(Validation.mail(change.getControlNewText())){
                showCorrectIcon(mailTextField);
                }else{
                showErrorIcon(mailTextField);
            }
        }
    }
    return change;
}));
...