java SWT:用SWTKeySupport方便进行组合键判断(如Ctrl+F11)

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')

你可能感兴趣的:(java,SWT,stateMask,keyCode,组合键,java,ui)