我正在寻找解决问题的方法。我创建了一个自定义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());
}

}

如何更快地更改值?

最佳答案

TextChangeEventMode设置为EAGER将导致在按下每个键后触发事件。这似乎常常有点太快,而且开销太大。

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

尝试设置适当的InputEventTimeout

暗示:

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

09-06 10:42