Gwt 无法将数据网格中的筛选和排序作为单独的事件处理

Gwt 无法将数据网格中的筛选和排序作为单独的事件处理,gwt,Gwt,目前,我已经为datagrid实现了一个自定义标题,其中包括一个用于过滤的文本框和标题。当我点击textbox时,该列会排序,我无法进行筛选。如果我删除排序部分,过滤工作正常。请提出任何意见,以便进行过滤和排序。下面是我的示例代码。(不包括所有内容,只显示了代码的相关部分) public类TextBoxHeader扩展了Header{ 公共TextBoxHeader(字符串标题、字符串宽度){ super(newtextinputcell()); this.title=标题; 如果(宽度!=nu

目前,我已经为datagrid实现了一个自定义标题,其中包括一个用于过滤的文本框和标题。当我点击textbox时,该列会排序,我无法进行筛选。如果我删除排序部分,过滤工作正常。请提出任何意见,以便进行过滤和排序。下面是我的示例代码。(不包括所有内容,只显示了代码的相关部分)

public类TextBoxHeader扩展了Header{
公共TextBoxHeader(字符串标题、字符串宽度){
super(newtextinputcell());
this.title=标题;
如果(宽度!=null){
这个。宽度=宽度;
}
}
@凌驾
公共void呈现(上下文上下文,SafeHtmlBuilder sb){
如果(值==null){
value=“”;
}
StringBuilder StringBuilder=新的StringBuilder();
stringBuilder.append(“
”); stringBuilder.append(标题); sb.append(SafeHtmlUtils.fromsafecontant(stringBuilder.toString()); } @凌驾 public void onBrowserEvent(上下文、元素元素、NativeEvent事件){ } } 此排序事件处理程序位于另一个类中。 受保护类DataGridSortEvent实现ColumnSortEvent.Handler{ @凌驾 public void onColumnSort(ColumnSortEvent事件){ System.out.println(“内部DataGridSortEvent-->”+事件.isSortAscending()); //customGrid.getDataProvider().refresh(); Collections.sort(customGrid.getDataProvider().getList(),nameComparator); //customGrid.getDataProvider().refresh(); /*setComparator(名称,newComparator(){ @凌驾 公共整数比较(o1人、o2人){ System.out.println(“内部比较器”); 返回o1.getName().compareTo(o2.getName()); } });*/ } } 有什么办法同时处理(排序和筛选)吗???
您应该覆盖onBrowserEvent,识别点击的来源(无论是文本输入还是标题(如果我没弄错的话,标题不是“排序”按钮),当然,我假设每个操作都有两个不同的可点击元素

下面的代码片段只是确定是单击了单元格的内容,还是单击了容器(单元格本身)。如果单击了输入,则执行过滤操作。如果单击了单元格,则执行排序操作

@Override
public void onBrowserEvent(Context context, Element parent, T value, NativeEvent event, ValueUpdater<T> valueUpdater) {
    // Handle the click event.
    super.onBrowserEvent(context, parent, value, event, valueUpdater);
    if (CLICK.equals(event.getType())) {
        // Ignore clicks that occur outside of the outermost element.
        EventTarget eventTarget = event.getEventTarget();
        Element eventElement = Element.as(eventTarget);
        NodeList<Element> listOfChildrens = parent.getElementsByTagName("*");
        for (int i = 0; i < listOfChildrens.getLength(); i++) {
            Element currentElement = listOfChildrens.getItem(i);
            if (currentElement.isOrHasChild(eventElement)) {
                // text is always inside a Text node =
                // element.childNodes[0].nodeValue.
                execute(value, eventElement.getFirstChild().getNodeValue());
            }
        }
    }
}
@覆盖
public void onBrowserEvent(上下文上下文、元素父级、T值、NativeEvent事件、ValueUpdater ValueUpdater){
//处理单击事件。
onBrowserEvent(上下文、父级、值、事件、值更新程序);
if(单击.equals(event.getType())){
//忽略在最外层元素之外发生的单击。
EventTarget EventTarget=event.getEventTarget();
Element eventElement=Element.as(eventTarget);
NodeList listOfChildrens=parent.getElementsByTagName(“*”);
for(int i=0;i
有关onBrowserEvent的更多示例,请参见页面和其他页面

@Override
public void onBrowserEvent(Context context, Element parent, T value, NativeEvent event, ValueUpdater<T> valueUpdater) {
    // Handle the click event.
    super.onBrowserEvent(context, parent, value, event, valueUpdater);
    if (CLICK.equals(event.getType())) {
        // Ignore clicks that occur outside of the outermost element.
        EventTarget eventTarget = event.getEventTarget();
        Element eventElement = Element.as(eventTarget);
        NodeList<Element> listOfChildrens = parent.getElementsByTagName("*");
        for (int i = 0; i < listOfChildrens.getLength(); i++) {
            Element currentElement = listOfChildrens.getItem(i);
            if (currentElement.isOrHasChild(eventElement)) {
                // text is always inside a Text node =
                // element.childNodes[0].nodeValue.
                execute(value, eventElement.getFirstChild().getNodeValue());
            }
        }
    }
}