2016-08-01 40 views
1

截至目前,我正在使用下面的代碼來檢測兩個按鍵。 I.e,Ctrl + F(或)Shift + 1 ...等等,如何檢測SWT中的3個按鍵KeyListener

CCombo comboBox = this.cellEditor.getViewer().getCCombo(); 
KeyAdapter keyAdapter = new KeyAdapter() 
{ 
    @Override 
    public void keyPressed(final KeyEvent evt) 
    { 
    // KeyPreferenceUtils is used to get the eclipse workbench key preference values. 
    int keyCode = KeyPreferenceUtils.getKeyValue(); 
    if ((evt.stateMask == SWT.CTRL) || (evt.stateMask == SWT.ALT) || (evt.stateMask == SWT.SHIFT) || (evt.stateMask == SWT.COMMAND)) 
    { 
     String pressedKey = Action.convertAccelerator(evt.stateMask + evt.keyCode); 
     int pressedKeyValue = Action.convertAccelerator(pressedKey); 
     if (pressedKeyValue == keyCode) 
     { 
     comboBox.setListVisible(true); 
     } 
    } 
    else if (evt.keyCode == keyCode) 
    { 
     comboBox.setListVisible(true); 
    } 
    } 
}; 
comboBox.addKeyListener(keyAdapter); 

現在我的問題是我想檢測3鍵按下。 I.e,Ctrl + Shift + 2或某些組合鍵。

回答

0

我不知道SWT那麼好,但我假設evt.stateMask是一個int用於表示一個位字段和SWT.XXX值代表相應位的掩碼。因此你可以試試if (evt.stateMask & SWT.CTRL > 0 && evt.stateMask & SWT.SHIFT > 0)

爲了澄清evt.stateMask & SWT.CTRL > 0將意味着,如果SWT.CTRL定義的位stateMask設置,你會得到一個值大於0,否則你得到0。但是,如果其他位設置,以及你不會檢測與該方法。

如果您只想允許設置這些位,您可以嘗試if (evt.stateMask == (SWT.CTRL | SWT.SHIFT))(即,將兩個掩碼合併,然後進行比較)。

例子:

我們將使用8位值,爲簡單起見,並承擔SWT.CTRL = 00000001SWT.SHIFT = 00000100

用第一種方法,你會得到真正的面具像100001010001010100000101和虛假的面具像00100100

在第二種方法中你只獲得真正爲stateMask = 00000101

1

要或掩模碼

@Override 
public void keyPressed(final KeyEvent evt) 
{ 
// KeyPreferenceUtils is used to get the eclipse workbench key preference values. 
    int keyCode = KeyPreferenceUtils.getKeyValue(); 
    if ((evt.stateMask & (SWT.CTRL | SWT.ALT)) == (SWT.CTRL | SWT.ALT)){ 
     // both ctrl and alt are pressed so do something 
    } 
    else if ((evt.stateMask == SWT.CTRL) || (evt.stateMask == SWT.ALT) || (evt.stateMask == SWT.SHIFT) || (evt.stateMask == SWT.COMMAND)) 
    { 
     // do something else 
    } 
    else if (evt.keyCode == keyCode) 
    { 
     comboBox.setListVisible(true); 
    } 
} 
+0

上述方法硬編碼鍵按壓到按「Ctrl」 /「Alt鍵」 /「換檔」 /等。 如果用戶輸入比任何其他鍵這個,這個邏輯不會幫助我。 是否有可能使其具有通用性?即用戶輸入的任何3個鍵被解析? –

+0

您可以始終測試所有狀態掩碼標誌並計算設置的數量。 – BevynQ