第一步 增加Palette项:
moveTool = new PanningSelectionTool() {
private Point viewLocation;
protected Cursor getDefaultCursor() {
return new Cursor(PlatformUI.createDisplay(), Activator
.getImage("icons/pan.gif").getImageData(), 0, 0);
}
public boolean handleButtonDown(int which) {
if (which == 1
&& getCurrentViewer().getControl() instanceof FigureCanvas) {
viewLocation = ((FigureCanvas) getCurrentViewer()
.getControl()).getViewport().getViewLocation();
return true;
}
return super.handleButtonDown(which);
}
protected boolean handleDrag() {
if (getCurrentViewer().getControl() instanceof FigureCanvas) {
FigureCanvas canvas = (FigureCanvas) getCurrentViewer()
.getControl();
canvas.scrollTo(viewLocation.x - getDragMoveDelta().width,
viewLocation.y - getDragMoveDelta().height);
return true;
} else {
return super.handleDragInProgress();
}
}
};
ToolEntry moveToolEntry = new ToolEntry("Panning", "Drag", Activator
.getImageDescriptor("icons/pan.gif"), Activator
.getImageDescriptor("icons/pan.gif")) {
public Tool createTool() {
return moveTool;
}
};
第二步 增加监听:
private void initListeners() {
getGraphicalControl().addMouseListener(new MouseListener() {
public void mouseDoubleClick(MouseEvent me) {
}
public void mouseDown(MouseEvent me) {
EditPart editPart = getGraphicalViewer().findObjectAt(
new Point(me.x, me.y));
if (editPart instanceof JavaProjectEditPart) {
isMouseDown = true;
updateActiveTool(me);
}
}
public void mouseUp(MouseEvent me) {
isMouseDown = false;
isMouseMoved = false;
if (isHandled) {
getEditDomain().setActiveTool(
getEditDomain().getDefaultTool());
}
isHandled = false;
}
});
getGraphicalControl().addMouseMoveListener(new MouseMoveListener() {
public void mouseMove(MouseEvent me) {
if (isMouseDown) {
isMouseMoved = true;
}
}
});
}
private boolean isMouseDown = false;
private boolean isMouseMoved = false;
private boolean isHandled = false;
protected void updateActiveTool(final MouseEvent me) {
new Thread() {
public void run() {
try {
sleep(200);
} catch (InterruptedException e) {
}
if (isMouseDown && !isMouseMoved) {
isHandled = true;
Display.getDefault().asyncExec(new Runnable() {
public void run() {
moveTool.mouseDown(me, getGraphicalViewer());
getEditDomain().setActiveTool(moveTool);
moveTool.setViewer(null);
};
});
}
}
}.start();
}
分享到:
相关推荐
"GEF锚点鼠标定位"这个主题主要探讨的是如何使锚点跟随鼠标移动,从而提供更加灵活和直观的用户操作体验。 1. **GEF框架基础**: GEF是Eclipse平台下的一个开源框架,专门用于构建图形化的编辑工具。它提供了一套...
GEF中的视图由`GraphicalViewer`类实现,它管理着画布上的所有图形元素。 3. **编辑器(Editor)**: 编辑器是Eclipse插件开发中的一个关键组件,它提供了对模型的编辑功能。GEF编辑器通常基于`...
3. **事件处理**:阐述如何响应用户的鼠标和键盘操作,实现图形元素的拖放、选择、移动和删除等操作。 4. **模型与视图**:探讨如何使用MVC模式来分离业务逻辑和显示逻辑,以及如何实现模型与视图的同步更新。 5. **...
6. **布局和约束**:为了保持画布的整洁和合理布局,`GEF`支持多种布局策略,如树形布局、网格布局等。同时,还可以为节点和连接线设置约束条件,限制它们的移动范围和方向。 7. **FecatGEF10**:这个文件名可能是...
标题中的“GEF资源打包”指的是一个集合了关于GEF(Graph Edit Framework)的各种学习资料的压缩文件。这个资源包可能包含了对理解、学习和使用GEF非常有帮助的材料。描述进一步说明了这个包中包含的具体内容,如...
本篇文章将深入探讨GEF中的图形移动与缩放功能的实现。 首先,GEF的核心在于其事件处理机制。当用户在图形视图上执行操作(如点击、拖动等)时,SWT事件会被转换为请求(request),这些请求随后被发送到Controller...
2. **图形表示**:GEF允许开发者定义图形元素的外观,包括形状、线条、颜色等,以及它们如何在画布上布局和交互。 3. **手势处理**:GEF提供了一套标准的手势处理机制,如拖放、单击、双击等,使得图形对象可以响应...
2. **视图(View)**:视图是模型的可视化表示,由GEF提供的画布(Canvas)和图形元素(如线条、形状等)构成。视图根据模型的变化实时更新,保持模型与视图的一致性。 3. **控制器(Controller)**:控制器处理...
3. **手势与命令**:通过定义手势和命令,GEF支持用户通过鼠标或键盘进行图形操作,如拖放、缩放、旋转等。 4. **Zest图表库**:GEF通常与Zest图表库结合使用,Zest提供了丰富的图表类型,如树状图、网络图等,增强...
接着,重点在于创建Editor,因为Editor是GEF中用于图形显示和编辑的主要部分。文档中提到了在plugin.xml的extensions页面中配置editor的相关信息,并生成了editor类。 3. 编辑器(Editor)的创建:Editor是GEF应用...
这是我自己在学习GEF的时候做的一些总结。 1、GEF中的概念比如Command,Tool,Request等等。 2、GEF中使用到的几种设计模式。 3、GEF中对鼠标键盘事件处理的机制、流程。
9. **ZOrder管理**:GEF提供了ZOrder管理机制,用于控制图元在画布上的堆叠顺序,影响它们的绘制和鼠标事件处理。 10. **图层(Layer)**:图层是视图的一种组织方式,可以帮助管理复杂视图中的图元,例如将连接线...
1. 往画布上添加多种节点 2. 节点之间的连线 3. 节点内容的编辑功能 4. 删除连线 5. 删除节点 6. 对节点的拖动以改变位置 运行这个例子的方法: 0. 必须要有一个Eclipse RCP的开发环境 1. 在你的Eclipse中要有GEF, ...
【IBM GEF推广资料】 IBM GEF(Graphical Editing Framework)是Eclipse平台上的一个开源图形编辑框架,专为构建图形化用户界面和图形编辑工具而设计。它提供了一个交互层,用于处理用户与图形视图之间的交互,实现...
3. 实现绘图策略(Layout):决定元素如何在画布上布局。 4. 创建命令(Command):定义可撤销/重做的操作,这些操作对模型进行更改。 5. 集成到Eclipse插件:将GEF编辑器作为Eclipse插件的一部分,实现与Eclipse...
Gef,全称Graphical Editing Framework,是Eclipse项目的一部分,是一个用于构建图形编辑框架的开源库,主要用于开发基于Swing或SWT的图形用户界面应用。这个框架支持模型驱动的编辑环境,允许开发者创建复杂的图形...
GEF(Graphical Editing Framework)是Eclipse平台中的一个核心组件,主要用于创建图形化编辑器。这个插件极大地扩展了Eclipse的功能,允许开发者构建复杂的图形用户界面(GUI)应用,特别是对于那些需要可视化表示...
- **Command层**:处理业务逻辑,实现具体编辑操作,如添加、删除、移动等。 - **Model层**:存储编辑对象的数据模型,与业务逻辑分离。 - **View层**:展示模型数据的可视化表示,通过EditParts实现。 - **...
- `EditPolicy`用于定义特定的编辑策略,如连接线的绘制、节点的移动等。 3. **视图 (View)**: - 视图层通过`EditPart`来呈现模型。`EditPart`可以包含其他`EditPart`以形成层次化的视图。 - 使用`Draw2D`工具包...
**GEF(Graphical Editing Framework)** 是一个用于构建图形编辑工具的开源框架,它为开发人员提供了一套全面的库和工具,用于创建基于Eclipse的富客户端平台(RCP)的应用程序,特别是那些涉及图形用户界面(GUI)...