smartGWT TileGrid::onKeyPress как переопределить клавишу Enter, но сохранить обработку по умолчанию для других клавиш

Я загружаю значки файлов на сетку плитки в проекте 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, клавиши со стрелками смогут перемещаться между элементами сетки плитки. Если я включаю, то вся панель сетки плитки прокручивается вместо изменения выбора.


person Mopparthy Ravindranath    schedule 10.07.2012    source источник


Ответы (2)


Вместо использования KeyPressHandler попробуйте KeyDownHandler, он работает.

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

Протестировано с последней сборкой smartgwt 3.0.

person Mayank R Jain    schedule 26.09.2012

@Mupparthy, я также реализовал keyPressHandler() для TextAreaItem. У меня также было то же требование, что нужно было обрабатывать только клавиши удаления и возврата. Что я сделал, так это не обрабатывать часть else. Он автоматически выполнял обработку по умолчанию для других клавиш, включая все клавиши со стрелками. Поэтому, если это не работает для вас, предоставьте мне отдельный код, чтобы мы могли заставить его работать.

person RAS    schedule 10.07.2012
comment
Привет @RAS, я добавил фрагмент кода. Можете ли вы проверить и дайте мне знать, если это можно исправить. заранее спасибо... - person Mopparthy Ravindranath; 10.07.2012
comment
@MupparthyRavindranath, вы пробовали удалить оператор else? - person RAS; 11.07.2012
comment
Привет @Ras, в коде нет оператора else. Просто If для обработки клавиши Enter. - person Mopparthy Ravindranath; 12.07.2012