Как добавить собственные сочетания клавиш в GWT CellTable

Я создал CellTable в GWT и установил .setKeyboardSelectionPolicy(KeyboardSelectionPolicy.ENABLED);, чтобы включить использование клавиатуры.

Теперь я могу перемещаться вверх и вниз с помощью клавиатуры и нажимать пробел, чтобы взаимодействовать с каждой строкой. Можно ли добавить собственные сочетания клавиш в эту CellTable? Например, я хочу изменить пробел, чтобы он действовал как кнопка ввода.


person v3ctor    schedule 28.12.2012    source источник


Ответы (2)


Вы можете ловить любую нажатую клавишу и делать все, что угодно. Если вы переопределяете поведение этого ключа по умолчанию, вам нужно сначала отменить собственное событие, а затем выполнять свои действия.

CellTable<Object> myTable = new CellTable<Object>();
// build myTable

myTable.addCellPreviewHandler(new Handler<Object>() {

    @Override
    public void onCellPreview(CellPreviewEvent<Object> event) {
        if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ESCAPE) {
            // Get selected object or objects from your SelectionModel
            // Do something with this object or objects, or
            // do something with the selected row or rows
        }
    }

});

Будьте осторожны с пробелом. В некоторых браузерах он действует как «страница вниз», поэтому пользователи могут не ожидать вашего пользовательского поведения при нажатии на него.

person Andrei Volgin    schedule 28.12.2012
comment
Извините, но я не понимаю, можете привести пример? в моем коде у меня есть addSelectionChangeHandler, где я добавляю метод addCellPreviewHandler - person v3ctor; 28.12.2012
comment
Вы добавляете этот CellPreviewHandler непосредственно в виджет CellTable. Ваш SelectionChangeHandler добавлен в вашу SelectionModel - его следует использовать для получения выбранных объектов. Вам не нужно добавлять CellPreviewHandler в свой SelectionChangeHandler, если только вы не пытаетесь изменить поведение выбора (не рекомендуется). - person Andrei Volgin; 28.12.2012

1- Вы не должны сначала отключать keyboardSelectionPolicy.

2- Вы должны добавить этот блок в конструктор или метод onLoad:

myTable.addCellPreviewHandler(new CellPreviewEvent.Handler<GuiltyAccusationInfoDto>() {
@Override
public void onCellPreview(CellPreviewEvent<GuiltyAccusationInfoDto> event) {
    if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_UP || event.getNativeEvent().getKeyCode() == KeyCodes.KEY_DOWN
            || event.getNativeEvent().getKeyCode() == KeyCodes.KEY_LEFT || event.getNativeEvent().getKeyCode() == KeyCodes.KEY_RIGHT
            || event.getNativeEvent().getKeyCode() == KeyCodes.KEY_PAGEUP || event.getNativeEvent().getKeyCode() == KeyCodes.KEY_PAGEDOWN) {
        selectionModel.setSelected(listOfData.get(table.getKeyboardSelectedRow()), true);
    }
}});
person Hadi Momenzadeh    schedule 11.05.2014