【问题标题】:Why the textchangelistener is slow?为什么 textchangelistener 很慢?
【发布时间】:2014-02-09 03:57:27
【问题描述】:

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

}

如何更快地更改值?

【问题讨论】:

标签: java vaadin vaadin7


【解决方案1】:

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

文本编辑暂停时触发 TextChangeEvent。暂停的长度可以通过 setInputEventTimeout() 来修改。

尝试设置一个合适的InputEventTimeout

提示:

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

【讨论】:

    【解决方案2】:

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

    setTextChangeEventMode(TextChangeEventMode.EAGER);
    

    【讨论】:

      猜你喜欢
      • 2019-10-02
      • 2010-10-30
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 2014-03-29
      • 2020-01-17
      • 2015-12-18
      • 1970-01-01
      相关资源
      最近更新 更多