2014-09-25 3 views
0

Как определить сочетание клавиш (ускоритель) с действием, связанным с элементом контекстного меню TreeViewer или TableViewer (или любым элементом управления в целом).Ярлык клавиатуры для действия в SWT

У меня есть деревья и таблицы разных объектов, и у меня есть общие действия, такие как «двигаться вверх», «перемещаться вниз», «развернуть» или «свернуть». Я создал контекстные меню для элементов управления таблицей или деревом, но я хочу, чтобы пользователь мог вызвать действия без необходимости правого щелчка по выбору (или без необходимости использования мыши вообще). Например, действие «Переместить вверх» должно вызываться, когда зритель сфокусирован, а пользователь нажимает Alt + . Установка ускорителя на эти действия не работает. Я также не хочу добавлять действия в главное меню (например, меню «Правка» и т. Д.).

ответ

2

Полагаю, вы используете Action для своих действий.

Вызов

setActionDefinitionId("command id"); 

в конструкторе действий, чтобы указать команду, что это действие ручками.

Объявите команду в своем plugin.xml с помощью точки расширения org.eclipse.ui.commands.

Используйте точку расширения org.eclipse.ui.bindings, чтобы привязать последовательность клавиш к команде.

+0

она не может быть сделано без влияя на plugin.xml? Также я не могу найти точку расширения org.eclipse.ui.keys. В объекте org.eclipse.ui.com есть элемент keyBinding. Может ли он использоваться вместо этого? – Patryk

+0

Извините, это была точка расширения org.eclipse.ui.bindings. Вы всегда можете обрабатывать события KeyDown в таблице и проверять свои сочетания клавиш –

1

Просто для будущих поколений:

Я последовал совету Грега и добавил KeyListsner к управлению телезрителя. Это фрагмент из моего класса, который оборачивает StructuredViewer:

private class ViewerWrapper{ 

    private StructuredViewer fViewer; 

    [...] 

    private class ViewerKeyAdapter implements KeyAdapter{ 
     private int fKeyCode; 
     private Action fAction; 
     private int fStateMask; 

     public ViewerKeyAdapter(int keyCode, int stateMask, Action action){ 
      fKeyCode = keyCode; 
      fStateMask = stateMask; 
      fAction = action; 
     } 

     @Override 
     public void keyReleased(KeyEvent e) { 
      if((e.stateMask & fStateMask) != 0 || fStateMask == SWT.NONE){ 
       if(e.keyCode == fKeyCode){ 
        fAction.run(); 
       } 
      } 
     } 
    } 

    [...] 

    public void addKeyListener(int keyCode, int stateMask, Action action){ 
     fViewer.getControl().addKeyListener(new ViewerKeyAdapter(keyCode, modifier, action)); 
    } 
} 

Большую часть времени я потратил на это, чтобы понять, что SWT.UP и SWT.ARROW_UP не то же самое ...

Смежные вопросы