1

我在 smartGWT 项目的平铺网格上加载文件图标。按下 Enter 键时,我想打开所选文件进行显示。

当我覆盖 onKeyPress 处理程序时,它确实有效,但使用左/右/上/下箭头键的平铺网格导航行为丢失了。

我的问题是..,如何保留默认处理行为,同时仍然覆盖 Enter 键。

  tileGrid.addKeyPressHandler (new KeyPressHandler() {
    @Override
    public void onKeyPress(KeyPressEvent event) {
      if (EventHandler.getKey().equals("Enter")) {
       //do something special here
      }
      else {
        **//TODO: do the default processing..**.
      }
    }
  });

编辑:

@Ras,这是模拟问题的代码。

package com.rv.gwtsample.client;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.smartgwt.client.data.Record;
import com.smartgwt.client.widgets.events.KeyPressEvent;
import com.smartgwt.client.widgets.events.KeyPressHandler;
import com.smartgwt.client.widgets.tile.TileGrid;
import com.smartgwt.client.widgets.tile.TileRecord;

/**
 * @author rvnath
 *
 */
public class MyTileGrid implements EntryPoint {

    /* (non-Javadoc)
     * @see com.google.gwt.core.client.EntryPoint#onModuleLoad()
     */
    @Override
    public void onModuleLoad() {
        // TODO Auto-generated method stub
        TileGrid grid = new TileGrid();
        grid.setLeft(50);
        grid.setTop(50);
        grid.setWidth("300");
        grid.setHeight("200");
            DetailViewerField field = new DetailViewerField("Name");
        grid.setFields(field);
        grid.addKeyPressHandler(new KeyPressHandler() {
            @Override
            public void onKeyPress(KeyPressEvent event) {
                if (event.getKeyName().equals("Enter"))
                    GWT.log("Enter pressed");
            }
        });

    Record[] rec = new TileRecord[32];
    for (int i=0; i<32; ++i) {
        rec[i] = new TileRecord();
    }

    grid.setData(rec);
    grid.draw();
}

}

如果我禁用 onKeyPress 处理程序,箭头键可以在磁贴网格的元素之间导航。如果我启用,则整个平铺网格面板会滚动,而不是选择更改。

4

2 回答 2

5

不要使用 KeyPressHandler,而是尝试使用 KeyDownHandler,它可以工作。

        tileGrid.addKeyDownHandler(new KeyDownHandler() {
            @Override
            public void onKeyDown(KeyDownEvent event) {
                if (EventHandler.getKey().equalsIgnoreCase("Enter")){
                    openModal(tileGrid.getSelectedRecord());
                }
            }
        });

使用最新的 3.0 smartgwt 构建测试。

于 2012-09-26T11:40:22.927 回答
0

@Mupparthy,我还为TextAreaItem实现了keyPressHandler()。我也有同样的要求,只需要处理删除和退格键。我所做的是,不要处理其他部分。它自动对包括所有箭头键在内的其他键进行默认处理。因此,如果它不适合您,请为我提供一个独立的代码,以便我们使其工作。

于 2012-07-10T06:58:39.893 回答