为什么textchangelistener很慢?

时间:2014-02-09 03:57:27

标签: java vaadin vaadin7

我正在为我的问题寻找解决方案。我创建了一个自定义TextField的类,我正在使用TextChangeListener来更改字段的值。用户输入更改(格式)的每个数字都将被采用。工作,但变化非常缓慢,我希望它更快。

这就是我的表现。

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());
}

}

如何更快地更改价值?

2 个答案:

答案 0 :(得分:4)

TextChangeEventMode设置为EAGER会导致在按下每个键后触发事件。这似乎经常有点太快和太多开销。

在编辑文本时暂停时会触发TextChangeEvent。可以使用setInputEventTimeout()修改暂停的长度。

尝试设置合适的InputEventTimeout

提示:

  

如果在超时期限之前发生ValueChangeEvent,则a   TextChangeEvent在它之前被触发,条件是文本   内容自上一个TextChangeEvent以来已更改。

答案 1 :(得分:1)

请看这里:5.8.4下的https://vaadin.com/book/-/page/components.textfield.html。文字更改事件。默认情况下,文本更改事件模式为LAZY。你想做的可能是:

setTextChangeEventMode(TextChangeEventMode.EAGER);