2012-12-28 2 views
0

J'ai créé un CellTable dans GWT et j'ai défini .setKeyboardSelectionPolicy(KeyboardSelectionPolicy.ENABLED); pour activer l'utilisation de keyboad.Comment ajouter des raccourcis clavier personnalisés à GWT CellTable

Maintenant, je peux monter et descendre avec le clavier et appuyer sur la barre d'espace pour interagir avec chaque ligne. Est-il possible d'ajouter des raccourcis clavier personnalisés à ce CellTable? Par exemple, je veux changer la barre d'espace pour agir comme le bouton d'entrée.

Répondre

1

Vous pouvez attraper n'importe quelle touche enfoncée et faire ce que vous voulez. Si vous remplacez un comportement par défaut de cette clé, vous devez d'abord annuler l'événement natif, puis effectuer vos actions.

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

}); 

Faites attention avec la barre d'espace. Il agit en tant que "page vers le bas" dans certains navigateurs, de sorte que les utilisateurs peuvent ne pas s'attendre à votre comportement personnalisé lorsque vous appuyez dessus.

+0

Désolé, mais je ne comprends pas peut me donner un exemple? dans mon code j'ai un addSelectionChangeHandler où j'ajoute la méthode addCellPreviewHandler – v3ctor

+0

Vous ajoutez ce CellPreviewHandler directement à votre widget CellTable. Votre SelectionChangeHandler est ajouté à votre SelectionModel - il doit être utilisé pour obtenir le (s) objet (s) sélectionné (s). Vous n'avez pas besoin d'ajouter CellPreviewHandler à votre SelectionChangeHandler sauf si vous essayez de modifier le comportement de sélection (non recommandé). –

0

1- Vous ne devez d'abord pas désactiver keyboardSelectionPolicy.

2- Vous devez ajouter ce bloc au constructeur ou méthode 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); 
    } 
}});