Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
特定时间后的GWT火灾值更改事件_Gwt_Timer_Textbox - Fatal编程技术网

特定时间后的GWT火灾值更改事件

特定时间后的GWT火灾值更改事件,gwt,timer,textbox,Gwt,Timer,Textbox,我有一个收集量很大的webapp。因此,我的用户会得到一个文本框来过滤集合。 但每次用户输入一个字母,过滤操作就会开始。有时候这很慢 因此,我只想在用户停止键入一秒钟时获取值更改事件 我这样试过: @Override public void onValueChange( ValueChangeEvent<String> event ) { Timer t = new Timer() { @Override public void r

我有一个收集量很大的webapp。因此,我的用户会得到一个文本框来过滤集合。 但每次用户输入一个字母,过滤操作就会开始。有时候这很慢

因此,我只想在用户停止键入一秒钟时获取值更改事件

我这样试过:

  @Override
  public void onValueChange( ValueChangeEvent<String> event )
  {
    Timer t = new Timer()
    {
      @Override
      public void run()
      {
        addChangeHandler( new ChangeHandler()
        {
          @Override
          public void onChange( ChangeEvent event1 )
          {
            ValueChangeEvent.fire( TextBoxPSG.this, getValue() );
          }
        } );
      }
    };
    t.schedule( 15000 );
  }
@覆盖
ValueChange上的公共作废(ValueChangeEvent事件)
{
定时器t=新定时器()
{
@凌驾
公开募捐
{
addChangeHandler(新的ChangeHandler()
{
@凌驾
更改后的公共无效(更改事件1)
{
ValueChangeEvent.fire(TextBoxPSG.this,getValue());
}
} );
}
};
t、 附表(15000);
}
但这不起作用。 也许有人有一个想法或相同的问题


提前谢谢

不要使用ValueChangeEvent。使用KeyUpEvent

private static Timer timer = new Timer() {
    @Override
    public void run() {
        // do you filter work;
    }
};

...
myTextBox.addKeyUpHandler(new KeyUpHandler() {

    @Override
    public void onKeyUp(KeyUpEvent event) {
        if (timer.isRunning()) {
            timer.cancel();
        }
        timer.schedule(1000);
    }

});

这很有帮助,但我们不会在每次需要过滤器时都实现这一点。在文本框中直接这样做会很好。因此,只允许文本框在一段时间后触发changeEvent或其他事件。然后,您需要对文本框进行子类化,基本上是将相同的代码移动到文本框中。如果您只在少数地方需要它,那么我的解决方案是一个更好的选择。我找到了另一个很好的解决方案。我写我自己的事件。然后在run方法中触发此事件。所以每个对这件事感兴趣的人都能得到它。