GWT GXT StoreFilterField事件

时间:2013-02-08 19:47:50

标签: java gwt filter tree gxt

我想仅在用户至少键入3个字符时才搜索我的树。 我如何抓住“doSelect”事件来做到这一点? 如果我在文本字段上添加keylistener来检查其值,则在doSelect之后调用该处理程序。 任何人都可以帮助我吗?

这是一个例子......

    filterText = new StoreFilterField<ModelData>() {

        @Override
        protected boolean doSelect(Store<ModelData> store,
                ModelData parent, ModelData record, String property,
                String filter) {

                String name = record.get("name");
                name = name.toLowerCase();
                if (name.startsWith(filter.toLowerCase())) 
                    return true;
                else
                    return false;
        }

    };

    KeyListener keyListener = new KeyListener() {
        public void componentKeyUp(ComponentEvent event) {
            loadingImage.setVisible(false);
            if(filterText.isValid() && filterText.getRawValue().length()>=FILTER_MIN_SIZE) {
                filterText.bind(store);
            } else {
                filterText.unbind(store);
            }

        }

    }; 
    filterText.setMinLength(FILTER_MIN_SIZE);
    filterText.bind(store);

1 个答案:

答案 0 :(得分:0)

(似乎是GXT 2,如果您实际使用的是GXT 3,请告诉我)

StoreFilterField依靠applyFilters方法实际应用所有这些方法。它已经检查了文本至少有一个字符:

protected void applyFilters(Store<M> store) {
  if (getRawValue().length() > 0) {
    store.addFilter(filter);
    store.applyFilters(property);
  } else {
    store.removeFilter(filter);
  }
}

我看到覆盖它的最简单方法是子类StoreFilterField并重新定义此方法:

filterText = new StoreFilterField<ModelData>() {
  @Override
  protected void applyFilters(Store<M> store) {
    if (getRawValue().length() > 3) {
      store.addFilter(filter);
      store.applyFilters(getProperty());
    } else {
      store.removeFilter(filter);
    }
  }
}