SWT下如果判断包含shfit,ctrl,alt的组合键,就要用到KeyEvent的stateMask字段。
关于stateMask的用法,参见我的上一篇博客《java SWT:MouseEvent,KeyEvent中stateMask字段的用法》
比如我们要用Ctrl-F11来实现全屏和正常屏幕显示的切换,直接使用stateMask字段判断的代码可以写成这样:
/**
* 屏幕为全屏状态时为true
*/
private boolean fullScreen=false;
private final KeyListener keyListener=new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if((e.stateMask & SWT.MODIFIER_MASK)==SWT.CTRL&&e.keyCode==SWT.F11){
fullScreen=!fullScreen;
shell.setFullScreen(fullScreen);
shell.setMaximized(fullScreen);
}
}
};
如果经常要写这种代码就有点烦而且容易出错,其实SWT已经提供了方便的方法供调用。
org.eclipse.jface.bindings.keys.SWTKeySupport
中提供了一些方便的方法用于将stateMask和keyCode字段组合起来返回一个int值方便进行判断。使用SWTKeySupport.convertEventToUnmodifiedAccelerator
上面的代码可以改成这样:
/**
* 屏幕为全屏状态时为true
*/
private boolean fullScreen=false;
private final KeyListener keyListener=new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if(SWTKeySupport.convertEventToUnmodifiedAccelerator(e)==(SWT.CTRL|SWT.F11)){
fullScreen=!fullScreen;
shell.setFullScreen(fullScreen);
shell.setMaximized(fullScreen);
}
}
};
convertEventToUnmodifiedAccelerator方法将stateMask和keyCode的值组合成一个整数值返回
比如”Ctrl+Shift+5” 返回 Ctrl和%的组合. (SWT.CTRL|’%’)
比如”Ctrl+F11” 返回 值为(SWT.CTRL|SWT.F11)
关于SWTKeySupport.convertEventToUnmodifiedAccelerator方法的原文说明参见:《Class SWTKeySupport》
http://help.eclipse.org/neon/nftopic/org.eclipse.platform.doc.isv/reference/api/index.html
再比如,如果判断Ctrl+5,
则写为SWTKeySupport.convertEventToUnmodifiedAccelerator(e)==(SWT.CTRL|'5')