[英]Keyboard shortcut to an action in SWT
如何为与TreeViewer
或TableViewer
(或一般任何控件)的上下文菜单项关联的动作定义键盘快捷方式(加速器)。
我有不同种类的对象的树和表,并且有通用操作,例如“向上移动”,“向下移动”,“展开”或“折叠”。 我为表或树控件创建了上下文菜单,但我希望用户能够调用操作而无需右键单击选择(或通常无需使用鼠标)。 例如,当查看者聚焦并且用户按下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.UP
和SWT.ARROW_UP
是不一样的...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.