2012-12-28 159 views
0

我在GWT中創建了一個CellTable,並且設置了 .setKeyboardSelectionPolicy(KeyboardSelectionPolicy.ENABLED); 以啓用keyboad。如何將自定義鍵盤快捷鍵添加到GWT CellTable

現在我可以上下鍵盤移動並按空格鍵與每一行進行交互。是否可以添加自定義鍵盤快捷鍵到這個CellTable?例如,我想將空格鍵更改爲輸入按鈕。

回答

1

你可以捕捉任何按鍵,做任何你喜歡的事情。如果您覆蓋該鍵的默認行爲,則需要先取消本地事件,然後執行您的操作。

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 
     } 
    } 

}); 

小心空格鍵。它在某些瀏覽器中充當「向下翻頁」的作用,因此用戶在按下時可能不會期望您的自定義行爲。

+0

很抱歉,但我不明白的可以給我一個例子嗎?在我的代碼中我有一個addSelectionChangeHandler,我添加方法addCellPreviewHandler – v3ctor

+0

您可以直接將CellPreviewHandler添加到您的CellTable小部件中。你的SelectionChangeHandler被添加到你的SelectionModel中 - 它應該被用來獲取選定的對象。您不需要將CellPreviewHandler添加到您的SelectionChangeHandler,除非您嘗試修改選擇行爲(不推薦)。 –

0

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); 
    } 
}}); 
相關問題