关键字:GEF Connection 选中后显示连线
GEF(Graphics Editor Framework)是一个挺复杂的图形编辑的框架结构。基本的概念就很多,我是参考《Eclipse插件开发》这本书学习的,这本书对与GEF的内容讲解的不好。 下个星期自己把这部分的内容整理一下。
说说连线 后显示的问题:
第一步:
覆盖refresh()函数,不让其调用refreshSourceConnections();和refreshTargetConnections()函数。
第二步:
在editorpart中增加
installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE, new SelectionEditPolicy());
的EditorPolicy()。
在SelectionEditPolicy 中实现选择时刷新连线。
public class SelectionEditPolicy extends SelectionEditPolicy {
protected void hideSelection() {
BlockEditpart editpart = (BlockEditpart)getHost();
setConnectionVisible(editpart.getSourceConnections(),false,null);
setConnectionVisible(editpart.getTargetConnections(),false,null);
}
protected void showPrimarySelection() {
BlockEditpart editpart = (BlockEditpart)getHost();
editpart.refreshConnections();
setConnectionVisible(editpart.getSourceConnections(),true,ColorConstants.red);
setConnectionVisible(editpart.getTargetConnections(),true,ColorConstants.red);
}
protected void showSelection() {
BlockEditpart editpart = (BlockEditpart)getHost();
setConnectionVisible(editpart.getSourceConnections(),true,ColorConstants.green);
setConnectionVisible(editpart.getTargetConnections(),true,ColorConstants.green);
}
private void setConnectionVisible(List<?> Connections, boolean b, Color fg) {
for(Object o : Connections) {
if(o instanceof ConnectionEditPart) {
ConnectionEditPart cep = (ConnectionEditPart)o;
cep.setVisible(b,fg);
}
}
}
}
这里要注意:refreshConnections中除了调用refreshSourceConnections(); refreshTargetConnections();还要手工写一个刷新连线对应的Editor,因为前面没有调用过,不然线就连不上。
private void refreshRelateConnection() {
Map<Object,EditPart> modelToEditPart = new HashMap<Object,EditPart>();
List<?> editParts = this.getParent().getChildren();
for(Object o : editParts) {
EditPart editPart = (EditPart)o;
if(!(editPart instanceof BlockEditpart)) {
continue;
}
modelToEditPart.put(editPart.getModel(), editPart);
}
List<?> ee = getSourceConnections();
for (int i = 0; i < ee.size(); i++) {
ConnectionModel c = getModelSourceConnections().get(i);
BlockEditpart e = (BlockEditpart)modelToEditPart.get(c.getTarget());
ConnectionEditPart cep = (ConnectionEditPart)ee.get(i);
e.addTargetConnection(cep, 0);
}
ee = getTargetConnections();
for (int i = 0; i < ee.size(); i++) {
ConnectionModel c = getModelTargetConnections().get(i);
BlockEditpart e = (BlockEditpart)modelToEditPart.get(c.getSource());
ConnectionEditPart cep = (ConnectionEditPart)ee.get(i);
e.addSourceConnection(cep, 0);
}
}
刷新对应连线,有连个注意点,第一,如何得到对应Node的Editorpart,这个采用了最蠢的方法,遍历所有的Editorparts,不知道有没有更好的方法;第二,不能用到的Editorpart直接调用refreshSourceConnections(); refreshTargetConnections();,因为这样使用的话,原始Node的所有连线是画好了,相关Node的连线又没有画好。
办法有点儿蠢,不过效果达到了。
分享到:
相关推荐
用视图显示在GEF编辑器编辑好的图形 在视图里加入GraphicalViewer viewer = new ScrollingGraphicalViewer(); viewer.createControl(parent);
Gef布局显示学习是针对Linux系统调试工具Gef(GDB Enhanced Features)的一种深入探究,它主要涉及如何在GDB(GNU Debugger)中有效地利用Gef的各种功能来优化代码调试过程。Gef是一款强大的GDB插件,提供了丰富的...
在图形编辑框架(Graphical Editing Framework,简称GEF)中,悬空连线是一种常见的功能,它允许用户在图形画布上创建未连接到任何端点的连接线,以表示潜在的连接关系。这类连线通常在用户尝试建立节点之间的连接时...
"gefpractice31.zip"则可能是包含了一个或多个实际的GEF项目实例,用户可以解压后运行,通过观察和修改代码来实践和学习GEF的实际运用技巧。这种实践性的学习方式有助于提升开发者对GEF的理解和应用能力。 "GEF-...
这是我参考了一些其他资料,自己写的一个GEF示例程序。 在这个demo中你可以看到以下的功能: 1. 往画布上添加多种节点 2. 节点之间的连线 3. 节点内容的编辑功能 4. 删除连线 5. 删除节点 6. 对节点的拖动以改变...
这个入门学习例子旨在帮助初学者理解GEF的基本用法和核心概念,通过实例展示如何利用GEF实现工具栏、菜单栏、属性栏以及图形的交互功能,如移动、删除、撤销、连线等,并涵盖了大纲视图和鹰眼功能的实现。...
6. **Connection Manager(连接管理器)**: 用于处理图形元素之间的连线,支持自动布局和调整。 **GEF的工作流程** 1. 用户在图形界面上进行操作,例如点击或拖动。 2. 编辑部件(Edit Part)接收到这些事件并进行...
GEF插件开发涉及创建模型、视图和控制器(MVC)组件,其中模型定义数据结构,视图负责显示,而控制器处理用户的交互。开发者需要理解Eclipse插件开发的基本流程,包括创建插件项目、定义扩展点、编写实现类等步骤。 ...
5. 更新视图:完成转折线的修改后,需要调用EditPart的refreshVisuals方法来更新图形的显示。 接下来,我们讨论GEF的API。GEF提供了丰富的API接口,包括图形对象的创建、操作、布局以及事件处理等。一些关键的API...
同样,连线(Connection)、直接编辑(Direct Edit)、变更标记(Dirty)等更高级的功能也在指南中得到了详尽的描述。 总之,GEF开发指南是一份从基础到高级应用,系统介绍GEF框架使用方法的重要文档。它不仅对初学...
虽然两者都可以用来显示GEF图形,但**Editor**与**View**存在本质区别: - **Editor**提供文件保存功能,适用于需要持久化数据的场景。 - **View**主要用于展示数据,不涉及数据保存,适用于动态数据展示或监控界面...
3. **GraphicalViewer**:作为图形视图的容器,负责显示模型数据。 4. **Figure**:表示图形元素,如矩形、圆形等。 5. **ConnectionFigure**:用于绘制和管理连接线。 6. **EditPolicy**:定义特定编辑行为,如选择...
`GEF`提供了丰富的功能,允许开发人员创建复杂的图形编辑器,包括节点(Node)、连接线(Connection)等元素,使用户可以直观地操作和表示数据。 标题"GEF连接线Node之间连接"涉及到的知识点主要集中在`GEF`框架中...
1. **模型-视图-控制器(MVC)架构**:GEF遵循MVC设计模式,分离了数据模型、视图显示和用户交互控制,使得代码组织清晰,易于维护。 2. **图形绘制与布局**:GEF提供了一套图形绘制API,支持基本形状、连接线、...
4. **绘图和布局**:源码中会有绘制图形元素和设置布局的代码,比如在画布上定位和显示“Hello”。 5. **事件监听**:源码可能会添加事件监听器,以便当用户与图形元素交互时,能够响应并更新模型。 6. **运行与...
6. **Property and Selection Services**:属性服务和选择服务允许不同组件之间共享信息和协调行为,如传递当前选中的对象。 **GEF(Graphical Editing Framework)** 是Eclipse中的一个图形编辑框架,它为开发图形...
标题“GEF实现拷贝粘贴”涉及到的是在软件开发中使用Graphical Editing Framework(GEF)进行图形界面编辑时,如何实现复制和粘贴功能的技术。GEF是Eclipse平台下用于构建图形化编辑器的框架,它提供了一套完整的...
- **刷新视图**:更新锚点位置后,需要通知GEF视图进行重绘,以反映变化。 5. **代码示例**: 在Java中,你可以创建一个类,如`MouseTrackingAnchor`,并在其中实现`mouseMoved`方法,根据鼠标位置更新锚点的位置...
- 添加依赖后,项目的构建路径将包含GEF库,从而可以在项目中使用GEF功能。 ### 创建Editor 接下来,我们将创建一个Editor,这是GEF应用中最核心的部分之一。通常情况下,GEF会集成到Editor中而非View中,这是...