键盘SWT中操作的快捷方式

时间:2014-09-25 09:03:52

标签: java eclipse eclipse-plugin swt jface

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

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

2 个答案:

答案 0 :(得分:2)

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

呼叫

setActionDefinitionId("command id");

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

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

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

答案 1 :(得分:1)

仅为后代:

我按照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不一样......