如何为与TreeViewer
或TableViewer
(或任何一般控件)的上下文菜单项关联的操作定义键盘快捷键(加速器)。
我有不同类型对象的树和表,我有一些通用的操作,如“向上移动”,“向下移动”,“扩展”或“崩溃”。我为表或树控件创建了上下文菜单,但我希望用户能够调用操作而无需右键单击选择(或者通常不需要使用鼠标)。例如,当观察者聚焦并且用户按 Alt + ↑时,应调用“上移”动作。 将加速器设置为该操作不起作用。我也不想将操作添加到主菜单栏(如编辑菜单等)。
答案 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.UP
和SWT.ARROW_UP
不一样......