Вопрос

I'm looking for a solution for my problem. I created a class that customize a TextField and I'm using TextChangeListener to change the value of field. Every number that user enter the change(format) is taken. Works, but the change is very slow I want it to be faster.

Here's how I'm doing.

public class CpfField extends TextField implements TextChangeListener{  
    private final StringBuilder CPF = new StringBuilder();  

public CpfField(){
    super("CPF");
    setImmediate(true);
    setMaxLength(14);       
    addTextChangeListener(this);
}

    //change(format) values 
@Override
public void textChange(TextChangeEvent event) {
    if(!event.getText().trim().isEmpty()){
        if(event.getText().length() == 3){
            CPF.append(event.getText());                    
            CPF.insert(3,".");
        }else if(event.getText().length() == 7){
            CPF.setLength(0);
            CPF.append(event.getText());
            CPF.insert(7,".");              
        }else if(event.getText().length() == 11){
            CPF.setLength(0);
            CPF.append(event.getText());
            CPF.insert(11,"-");             
        }else{
            CPF.setLength(0);
            CPF.append(event.getText());
        }
    }else{
        CPF.setLength(0);
        setValue("");
    }
    setValue(CPF.toString());
}

}

How to change values faster ?

Это было полезно?

Решение

Setting the TextChangeEventMode to EAGER would result to trigger the event after each key is pressed. That seems often a bit too fast and too much overhead.

A TextChangeEvent is triggered when there is a pause in editing the text. The length of the pause can be modified with setInputEventTimeout().

Try to set an appropriate InputEventTimeout.

Hint:

If a ValueChangeEvent would occur before the timeout period, a TextChangeEvent is triggered before it, on the condition that the text content has changed since the previous TextChangeEvent.

Другие советы

Take a look here: https://vaadin.com/book/-/page/components.textfield.html under 5.8.4. Text Change Events. By default text change event mode is LAZY. What you want to do is probably:

setTextChangeEventMode(TextChangeEventMode.EAGER);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top