在GraphicalViewerKeyHandler里面会监听 键盘的上下左右的事件, 效果就是选中下一个界面上的控件. 但, 用户要求改成 给当前选择控件 移动位置. [GEF的对于上下左右的默认处理比较怪, 和一般的编辑器不一样的效果, 用户要求修改是正常的.]
下面贴主要代码:
getGraphicalViewer().setKeyHandler(new GefViewerKeyHandler(getGraphicalViewer()).setParent(this.sharedKeyHandler));
GefViewerKeyHandler 就是继承于GraphicalViewerKeyHandler, 并覆盖了keyPressed方法.
public class GefViewerKeyHandler extends GraphicalViewerKeyHandler {
public GefViewerKeyHandler(GraphicalViewer viewer) {
super(viewer);
}
@Override
public boolean keyPressed(KeyEvent event) {
if ((event.stateMask & SWT.ALT) == 0 && (event.stateMask & SWT.CTRL) == 0 && (event.stateMask & SWT.SHIFT) == 0
&& (event.keyCode == SWT.ARROW_DOWN || event.keyCode == SWT.ARROW_LEFT || event.keyCode == SWT.ARROW_RIGHT || event.keyCode == SWT.ARROW_UP)) {
GraphicalEditPart editPart = getFocusEditPart();
if (editPart instanceof BaseControlEditPart) {
BaseControlModel baseControlModel = ((BaseControlEditPart) editPart).getControlModel();
ChangeBoundsRequest request = new ChangeBoundsRequest(RequestConstants.REQ_MOVE); // 请求事件类型:移动
request.setLocation(new Point(baseControlModel.getX(), baseControlModel.getY())); // 从Model得到移动的初始位置
request.setEditParts(editPart);
Point moveDelta = null;
switch (event.keyCode) { // 下面根据按键 得到对应的移动delta(增量)
case SWT.ARROW_LEFT:
moveDelta = new Point(-5, 0); // 左移5像素
break;
case SWT.ARROW_RIGHT:
moveDelta = new Point(5, 0); // 右移5像素
break;
case SWT.ARROW_UP:
moveDelta = new Point(0, -5); // 上移5像素
break;
case SWT.ARROW_DOWN:
moveDelta = new Point(0, 5); // 下移5像素
break;
}
request.setMoveDelta(moveDelta);
Command command = editPart.getCommand(request);
if (command != null && !(command instanceof UnexecutableCommand)) {
command.execute(); // 触发移动的事件
return true;
}
}
}
return super.keyPressed(event);
}
}
代码很简单,
1. 就是告诉当前选中的EditPart, 说要触发一个RequestConstants.REQ_MOVE的事件,
2. Command command = editPart.getCommand(request);
3. 得到command后, 执行即可command.execute();
分享到:
相关推荐
GEF入门必读 GEF入门系列 GEF-whole-upload 感谢八进制
这是我自己在学习GEF的时候做的一些总结。 1、GEF中的概念比如Command,Tool,Request等等。 2、GEF中使用到的几种设计模式。 3、GEF中对鼠标键盘事件处理的机制、流程。
gef all 3.5.2 源码
我下的资源的打包,希望有帮助,包括:GEF_Tutorial,GEF实例,入门教程,GEF-whole-upload
GEF简易教程-学习GEF的入门教程,不错的gef入门教程
gef 绘图折线的实现方法。 gef API chm 格式
GEF eclipse 插件
GEF: Graphical Editing Framework <br>GEF是一套MVC Framework,它能帮你比较容易的建立图形化的编辑器,V(View)的部分常常是基于SWT的Draw2D,因此Draw2D也看作是GEF的一部分。依赖:org.eclipse.gef***, org...
GEF.rar GEF.rar GEF.rar
GEF理解之第三部分,学习gef必备文档资料啊,值得下载
GEF理解之第一部分,学习gef必备文档资料啊,值得下载
Eclipse插件GEF的介绍,对于学习GEF有很大帮助
GEF-ALL-3.7 GEF-ALL-3.8 官方包。 GEF Draw2d 学习资料
Agenda Start things off What is GEF? GEF Demo Draw2d Overview Example GEF Overview Break Hands-on Activity: Shapes Example
这是我参考了一些其他资料,自己写的一个GEF示例程序。 在这个demo中你可以看到以下的功能: 1. 往画布上添加多种节点 2. 节点之间的连线 3. 节点内容的编辑功能 4. 删除连线 5. 删除节点 6. 对节点的拖动以改变...
GEF 入门系列 GEF
GEF Example Source Code,
Gef入门开发,详细解析。 Gef入门开发,详细解析 Gef入门开发,详细解析
一本很好的GEF入门教程,通过实例详细的描述了GEF开发的全流程。
gef开发实例 gef开发的好例子,比较简单的实现了MVC的架构