2014-09-25 57 views
0

如何將鍵盤快捷鍵(加速器)定義爲與上下文菜單項TreeViewerTableViewer(或任何通用控件)關聯的動作。SWT中的動作的鍵盤快捷鍵

我有不同類型的對象的樹和表,我有「上移」,「下移」,「展開」或「崩潰」等通用操作。我爲表格或樹形控件創建了上下文菜單,但是我希望用戶能夠在不需要右擊選擇的情況下調用操作(或者不需要一般使用鼠標)。例如,當觀衆聚焦並且用戶按下Alt + 時,應該調用「上移」動作。 將加速器設置爲該操作不起作用。我也不想將操作添加到主菜單欄(如「編輯」菜單等)。

回答

2

我認爲你正在使用Action作爲你的行爲。

呼叫

setActionDefinitionId("command id"); 

在你的行動構造函數來指定這個動作處理的命令。

使用org.eclipse.ui.commands擴展點在plugin.xml中聲明該命令。

使用org.eclipse.ui.bindings擴展點將鍵序列綁定到該命令。

+0

不能像沒有完成影響plugin.xml?另外我找不到org.eclipse.ui.keys延伸點。 org.eclipse.ui.commands中有keyBinding項。它可以用來代替嗎? – Patryk 2014-09-25 10:58:59

+0

抱歉應該是'org.eclipse.ui.bindings'的擴展點。您始終可以處理桌面上的'KeyDown'事件並檢查您的快捷鍵 – 2014-09-28 19:48:27

1

只是爲了子孫後代:

我跟Greg的意見,並添加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.UPSWT.ARROW_UP是不一樣的......