ListGrid 将焦点放在 FilterEditor 中

ListGrid put focus in the FilterEditor

我有一个这样定义的 ListGrid:

ListGrid lgrid = new ListGrid();
ListGridField first  = new ListGridField("first",first");
ListGridField second = new ListGridField("second ",second ");
lgrid.setFields(first, second);
lgrid.setShowFilterEditor(true);

¿在布局中调用 show() 后,如何将键盘焦点放在第一个过滤器编辑器字段中?

提前致谢。

我得到了解决方案,它的focusInFilterEditor,这是一个在数据到达网格后设置焦点的例子:

   // Put the focus on the first listGrid field when is loaded    
    listGrid.addDataArrivedHandler(new DataArrivedHandler() {
        @Override
        public void onDataArrived(DataArrivedEvent event) {
                Timer t = new Timer() {
                    public void run() {     
                        if(listGrid.getFilterEditorCriteria() == null){
                            listGrid.focusInFilterEditor("fieldToFocus");
                        }
                    }
                };
                t.schedule(600);
        }
    });

根据您的用例(这有助于提供更有针对性的答案),您发布的解决方案可能不是您真正需要的,因为如果您在 ListGrid 上滚动,它可能会触发一个新的数据获取(如果有更多记录要显示),并因此将光标移动到过滤器编辑器(如果您的用户此时正在编辑一些记录,光标移动到过滤器行不是她想要发生的!!).

在这种情况下,您可能只想在 listGrid.show() 语句之后或在用于获取数据的某些按钮的 ClickHandler 中调用 grid.focusInFilterEditor("fieldToFocus"),等等。

总之,你也不需要定时器。这有效:

listGrid.addDataArrivedHandler(new DataArrivedHandler() {
    @Override
    public void onDataArrived(DataArrivedEvent event) {
        grid.focusInFilterEditor("fieldToFocus");
    }
});