2016-08-01 10 views
1

現在、以下のコードを使用して2つのキーを検出しています。 Ctrl + F(または)Shift + 1 ...など。SWT KeyListenerの3つのキー押下の検出方法

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つのキーの押下を検出したいことです。つまり、Ctrl + Shift + 2またはいくつかのキーの組み合わせ。

答えて

0

私はそれもSWTを知らないが、私はevt.stateMaskは、ビットフィールドを表すために使用intSWT.XXX値は、対応するビットのマスクを表していると仮定したいです。したがって、if (evt.stateMask & SWT.CTRL > 0 && evt.stateMask & SWT.SHIFT > 0)を試すことができます。他のビットも同様にあなたがそれを検出しています設定されている場合はそうでないあなたが、しかし、0を得るevt.stateMask & SWT.CTRL > 0SWT.CTRLによって定義されたビットがstateMaskに設定されている場合は、0以上の値を取得しますことを意味する明確にするために

そのアプローチ。

これらのビットを設定できるようにする場合は、if (evt.stateMask == (SWT.CTRL | SWT.SHIFT))を試すことができます(つまり、2つのマスクを組み合わせて比較します)。

例:

我々は簡単にするために8ビットの値を使用してSWT.CTRL = 00000001SWT.SHIFT = 00000100を仮定します。

あなたは 10000101のようなマスクの真取得したい最初のアプローチでは

000101010000010100100100のようなマスクの偽など

第二のアプローチであなただけの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キー」/「Shiftキー」には/ etcたいですこれは、この論理は私を助けません。 一般的にすることはできますか?すなわち、ユーザによって入力された任意の3つのキーが解析されるか? –

+0

すべての状態マスクフラグをテストし、設定されている数をカウントすることができます。 – BevynQ

関連する問題