`
lggege
  • 浏览: 375530 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

GEF 修改默认的上下左右按键事件[GraphicalViewerKeyHandler]

    博客分类:
  • GEF
UP 
阅读更多
在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();
分享到:
评论
1 楼 tob111 2009-08-12  
顶、、、、

相关推荐

    自己下的GEF资源打包

    "gefpractice31.zip"则可能是包含了一个或多个实际的GEF项目实例,用户可以解压后运行,通过观察和修改代码来实践和学习GEF的实际运用技巧。这种实践性的学习方式有助于提升开发者对GEF的理解和应用能力。 "GEF-...

    GEF锚点鼠标定位

    在图形编辑框架(GEF,Graphical Editing Framework)中,锚点(Anchor)是一个关键概念,它是连接模型元素之间的连接线在元素上的固定点。在GEF中,锚点的定位直接影响到连接线的形状和行为,特别是当用户通过鼠标...

    gef 转折线的相关方法实现和 GEF的API chm 格式

    GEF提供了丰富的API接口,包括图形对象的创建、操作、布局以及事件处理等。一些关键的API如下: - `org.eclipse.gef.EditPart`:这是GEF的核心组件,它代表了图形模型中的一个元素,并负责将其映射到视图中。 - `...

    GEF入门必读 GEF入门系列 GEF-whole-upload

    **GEF(Graphical Editing Framework)** 是一个用于构建图形化编辑器的开源框架,它在Eclipse平台上广泛使用,特别是在开发复杂的图形用户界面和工具时。本资料集旨在为初学者提供一个全面的入门指南,帮助理解GEF...

    gef all 3.5.2 源码

    3. **反汇编器增强**:Gef All改进了GDB默认的反汇编视图,提供了更丰富的信息和更易读的布局。相关代码可能在`disas`或`disassemble`模块中。 4. **内存管理**:Gef All提供了对内存区域的查看和操作工具,这在`...

    GEF Example Source Code

    **GEF(Graphical Editing Framework)** 是一个用于构建图形编辑工具的开源框架,它为开发人员提供了一套全面的库和工具,用于创建基于Eclipse的富客户端平台(RCP)的应用程序,特别是那些涉及图形用户界面(GUI)...

    GEF简易教程-学习GEF的入门教程

    在RCP项目中,**Editor**是最常见的GEF承载对象,它继承自`EditorPart`,提供了图形修改后的自动保存机制,这是View不具备的功能。 为了构建GEF编辑器,需要创建以下三个核心组件: 1. **模型(Model)**:定义数据...

    GEF 进阶+源码.rar

    9. **事件处理(Event Handling)**:DRAW2D和GEF都提供了丰富的事件处理机制,允许监听和响应用户操作,如鼠标点击、键盘输入等。 10. **样例代码(Sample Code)**:`samplecode.rar`很可能包含了实际的编程示例...

    GEF教程和demo源码

    **GEF(Graphical Editing Framework)教程与Demo源码详解** GEF,全称为Graphical Editing Framework,是Eclipse平台上用于构建图形化编辑器的一种框架。它为开发人员提供了丰富的工具,可以方便地创建出复杂的...

    GEF教程及demo源码

    **GEF教程及DEMO源码详解** GEF(Graphical Editing Framework)是Eclipse平台下的一个图形编辑框架,主要用于构建可自定义的图形化编辑工具。它为开发者提供了丰富的API和模型,使得开发人员可以方便地创建出复杂...

    GEF-ALL-3.7+GEF-ALL-3.8+GEF_Draw2d学习资料

    【GEF-ALL-3.7+GEF-ALL-3.8+GEF_Draw2d学习资料】是一份综合性的资源包,包含了GEF(Graphical Editing Framework)的3.7和3.8版本以及与其相关的Draw2D库的学习材料。GEF是Eclipse平台上用于构建图形化编辑器框架的...

    GEF 入门版中文教程 源码

    【GEF入门版中文教程 源码】是针对RCP(Rich Client Platform)平台下图形编辑框架(Graphical Editor Framework,简称GEF)的学习资源,特别适合初学者。RCP是Eclipse组织提供的一种用于构建桌面应用的框架,而GEF...

    GEF入门学习例子

    **GEF入门学习例子** **概述** `GEF`(Graphical Editing Framework)是Eclipse开源组织提供的一款强大的图形编辑框架,用于构建图形用户界面(GUI)应用,特别是那些需要进行图形绘制、编辑和操作的软件。这个入门...

    Eclipse的GEF学习

    ### Eclipse的GEF框架深入解析 #### 一、GEF框架概述 GEF,全称为Graphical Editor Framework,是Eclipse平台下的一款图形编辑框架,主要用于构建图形化编辑器,如流程设计器、UML类图编辑器等。GEF遵循经典的MVC...

    GEF 3.10 eclipse 插件

    **GEF 3.10 Eclipse 插件详解** **一、GEF简介** GEF(Graphical Editing Framework)是Eclipse平台中的一个图形编辑框架,用于构建图形化用户界面和图形编辑工具。它为开发者提供了创建可定制的、基于模型的图形...

    GEF框架入门学习

    这是我自己在学习GEF的时候做的一些总结。 1、GEF中的概念比如Command,Tool,Request等等。 2、GEF中使用到的几种设计模式。 3、GEF中对鼠标键盘事件处理的机制、流程。

    GEF-SDK-3.7.0

    6. **事件处理与反向工程**:GEF可以捕获用户对图形的操作,并将这些操作转化为代码,反之亦然,支持模型到视图的同步。 **Eclipse** 是一个高度可扩展的开放源码IDE,最初为Java开发而设计,但现在支持多种语言和...

    GEF理解系列三

    首先,GEF的核心在于其事件处理机制。当用户在图形视图上执行操作(如点击、拖动等)时,SWT事件会被转换为请求(request),这些请求随后被发送到Controller(通常是EditPart)上。Controller并不直接处理操作,...

    gef学习文档+学习源码

    对于控制器,Gef可以帮助调试事件处理和逻辑流程。 在富客户端开发中,Gef同样扮演着重要角色。富客户端应用通常涉及复杂的内存管理和多线程操作,这些是逆向工程和调试的关键领域。Gef可以协助开发者检测内存泄漏...

    GEF-SDK-3.6.2 jar

    GEF的引入主要是为了支持ADT中的图形化界面设计,使得开发者可以更直观地构建和修改Android应用的用户界面。 Eclipse GEF框架的核心特性包括: 1. **模型-视图-控制器(MVC)架构**:GEF遵循MVC设计模式,将数据...

Global site tag (gtag.js) - Google Analytics