繁体   English   中英

SWT中操作的键盘快捷键

[英]Keyboard shortcut to an action in SWT

如何为与TreeViewerTableViewer (或一般任何控件)的上下文菜单项关联的动作定义键盘快捷方式(加速器)。

我有不同种类的对象的树和表,并且有通用操作,例如“向上移动”,“向下移动”,“展开”或“折叠”。 我为表或树控件创建了上下文菜单,但我希望用户能够调用操作而无需右键单击选择(或通常无需使用鼠标)。 例如,当查看者聚焦并且用户按下Alt + 时,应调用“上移”动作。 将加速器设置为该操作不起作用。 我也不想将操作添加到主菜单栏(例如“编辑”菜单等)。

我认为您正在使用Action进行操作。

呼叫

setActionDefinitionId("command id");

在Action构造函数中指定此操作要处理的命令。

使用org.eclipse.ui.commands扩展点在plugin.xml中声明命令。

使用org.eclipse.ui.bindings扩展点将键序列绑定到命令。

只为子孙后代:

我遵循Greg的建议,并将KeyListsner添加到查看器控件中。 这是包装StructuredViewer的类的摘要:

private class ViewerWrapper{

    private StructuredViewer fViewer;

    [...]

    private class ViewerKeyAdapter implements KeyAdapter{
        private int fKeyCode;
        private Action fAction;
        private int fStateMask;

        public ViewerKeyAdapter(int keyCode, int stateMask, Action action){
            fKeyCode = keyCode;
            fStateMask = stateMask;
            fAction = action;
        }

        @Override
        public void keyReleased(KeyEvent e) {
            if((e.stateMask & fStateMask) != 0 || fStateMask == SWT.NONE){
                if(e.keyCode == fKeyCode){
                    fAction.run();
                }
            }
        }
    }

    [...]

    public void addKeyListener(int keyCode, int stateMask, Action action){
        fViewer.getControl().addKeyListener(new ViewerKeyAdapter(keyCode, modifier, action));
    }
}

我花在上面的大部分时间是意识到SWT.UPSWT.ARROW_UP是不一样的...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM