我正在寻找解决问题的方法。我创建了一个自定义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以来,内容已更改。