截至目前,我正在使用以下代码来检测两个按键。即,Ctrl + F(或)Shift + 1 ...等等,
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 :(得分:2)
你想要的还是面具代码
@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);
}
}
答案 1 :(得分:1)
我不太了解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 = 00000001
和SWT.SHIFT = 00000100
。
使用第一种方法,您可以使用10000101
,00010101
,00000101
这样的掩码,对00100100
等掩码使用false。
使用第二种方法,您只能获得stateMask = 00000101
。