在GMF帮我们生成的应用程序里,画布(Canvas)的布局缺省是使用XYLayout的,这种布局适合UML类图、流程图等应用,但并不适合序列图或表格这类应用。而且目前GMF的.gmfgraph模型里没有提供为整个Canvas设置布局的地方,因此只能通过修改代码的方式实现。因为GMF Runtime是基于GEF的,即GMF生成的代码本质上也是一个GEF应用程序,所以根据以往编写GEF应用程序的经验,不难找到需要修改的地方。
首先要修改作为画布的那个EditPart(下称yourCanvasEditPart),这个类是从gmf的DiagramEditPart继承过来的,看一下后者的createDefaultEditPolicies()方法就会发现它的LAYOUT_ROLE的EditPolicy是gmf的XYLayoutEditPolicy:
installEditPolicy(EditPolicy.LAYOUT_ROLE, new XYLayoutEditPolicy());
GEF里同一个EditPart上要覆盖一个已有EditPolicy的方法是使用同样的Role安装新的EditPolicy,所以我们应该在yourCanvasEditPart的createDefaultEditPolicies()方法里使用LAYOUT_ROLE安装自己的EditPolicy,这里为方便使用了GEF提供的FlowLayoutEditPolicy,你若有特殊需要可实现自己的EditPolicy:
installEditPolicy(EditPolicy.LAYOUT_ROLE, new FlowLayoutEditPolicy() {
@Override
protected Command getCreateCommand(CreateRequest request) {
return null;
}
@Override
protected Command createMoveChildCommand(EditPart child,
EditPart after) {
return null;
}
@Override
protected Command createAddCommand(EditPart child, EditPart after) {
return null;
}
@Override
protected boolean isHorizontal() {
return true;
}
});
我们知道,GEF里每个EditPart上作为LAYOUT_ROLE安装的EditPolicy应该和此EditPart对应的Figure使用的LayoutManager匹配,例如XYLayoutEditPolicy对应XYLayout,而FlowLayoutEditPolicy匹配的LayoutManager就是FlowLayout或ToolbarLayout,这两个LayoutManager最大的区别是前者允许子图形换行(列)排列,而后者只能有一行(列)。要注意一点,FlowLayoutEditPolicy与ToolbarLayout一起使用存在一点问题,原因是在FlowLayoutEditPolicy的isHorizontal()方法里认为传入的layoutmanager参数是FlowLayout,因此我们在上面代码里覆盖了isHorizontal()方法,至于返回true或false根据你的需求决定。
现在,为了匹配修改后使用的FlowLayoutEditPolicy,我们要覆盖yourCanvasEditPart的createFigure()方法,在父类DiagramEditPart里这个方法返回的Figure使用的是FreeFormLayout,我们现在需要的是ToolbarLayout,所以:
protected IFigure createFigure() {
Figure f = new FreeformLayer();
ToolbarLayout layout = new ToolbarLayout();
layout.setVertical(false);
layout.setSpacing(10);
layout.setStretchMinorAxis(true);
f.setLayoutManager(layout);
f.setBorder(new MarginBorder(15));
return f;
}
经过这样两处修改后,你的编辑器应该已经像下图所示这样了(可能还有些细节代码需要处理一下):
GMF在GEF基础上做了很多包装,例如添加了SemanticEditPolicy、CanonicalEditPolicy等等新的EditPolicy,以及相关的很多Command和EditPart,它们为GMF应用程序提供了新的功能,虽然掌握GMF Runtime的API需要花些时间,但这允许我们在不进行大规模编写代码的情况下获得符合需求的图形化编辑器,建议先提前了解一下。
Update(2007/07/17): 在GMF 2.0里,可以通过设置xxx.gmfgen文件里Figure Viewmap的"Layout Type"属性为"TOOLBAR_LAYOUT"达到同样目的。
分享到:
相关推荐
利用GEF,开发者可以创建复杂的图形模型,如流程图、状态机或数据流图,并将这些图形元素与JSP代码关联起来。通过拖拽和放置,开发者可以在图形界面上直观地定义页面结构和逻辑。此外,GEF还支持自定义绘图工具、...
10. **扩展性**:GEF的设计允许开发者通过插件机制扩展其功能,以满足特定需求或定制化工作流。 综上所述,"GEF-runtime-3.1" 提供了一套完整的工具集,用于在Eclipse环境中开发高质量的图形化编辑器。开发者可以...
2. **创建第一个项目**:使用GEF工作流创建一个简单的图形编辑器,如画板和基本图形。 3. **实现命令**:编写自定义命令以处理用户操作,如添加、删除和移动图形元素。 4. **图形交互**:实现DirectEdit和手势识别,...
- **网络拓扑编辑器**:可以利用GEF创建网络设备和连接的可视化布局。 - **流程图编辑器**:设计工作流或业务流程时,GEF可以帮助构建图形化的流程表示。 - **UML建模工具**:支持创建和编辑类图、序列图等多种...
- **流程图设计**:流程图、工作流图、状态机等都可以用Gef实现。 - **网络拓扑图**:绘制和编辑网络设备的布局和连接。 - **电路图设计**:模拟电路设计和分析工具。 - **系统配置工具**:图形化展示和编辑系统...
- **新功能**:例如,可能添加了对复杂图形布局算法的支持,或者提供了更强大的图形交互功能。 - **错误修复**:修复已知问题,提高稳定性。 4. **使用场景** - **软件建模**:UML建模工具如Class Diagrams、...
6. **Layouts**:布局管理器,负责组织和排列图形元素的位置。 **GEF与Java的关系** GEF是用Java语言编写的,并且与Eclipse插件开发环境紧密结合。开发者可以利用Java的面向对象特性,结合GEF提供的API,轻松地构建...
2. **Perspective**:透视图定义了工作台的布局和可见性,可以根据用户的任务或工作流来组织和显示不同的视图和编辑器。 3. **View**:视图是工作台中的独立组件,它们通常显示特定类型的信息或提供某种功能。例如...
这部分包含了创建自定义图形模型、绘制和布局形状的方法,以及如何实现拖放、缩放、旋转等交互功能。这对于构建图表或流程图编辑器非常有用。 3. **org.eclipse.gef.examples.logic** 逻辑示例通常涉及到图形元素...
通过Visual Editor,开发者可以方便地创建和编辑窗口布局、控件放置、事件处理等,大大简化了UI设计过程。此外,Visual Editor还支持代码生成和反向工程,即从现有代码生成可视化表示,这在维护和理解已有代码结构时...
它提供了一组基础类和API,使得开发者可以快速地创建出交互式的图表和工作流编辑器。GEF支持拖放操作、连接线、缩放和平移等功能,为构建图形用户界面(GUI)提供了强大的支持。 VE插件是Eclipse的视觉编辑器,它是...
- **Zest**:是GEF的可视化库,提供丰富的图形渲染和布局算法,用于增强图形效果。 通过理解这些原理,开发者能够更好地设计和实现符合需求的图形编辑器。 总之,学习GEF需要理解其核心概念,熟悉项目搭建步骤,...
"GEF-runtime-3.1+"版本中,GEF已经相当成熟,提供了丰富的图形绘制和交互功能,包括图形对象的创建、编辑、布局和导航等。这个版本的更新可能包括增强的性能优化、新的交互模式以及对Eclipse新版本的兼容性改进。 ...
- **SWT (Standard Widget Toolkit)**:提供Eclipse界面中的基本图形组件,如按钮、图像等,以及布局管理功能。 - **JFace**:提供菜单、工具栏、对话框等高级界面元素。 - **PDE (Plugin Development ...
2. **流程图和工作流编辑器**:在流程管理和业务流程自动化领域,GEF可以构建直观易用的流程图编辑工具。 3. **网络拓扑图**:在IT网络管理中,使用GEF可以方便地设计和展示网络设备和连接的拓扑结构。 4. **软件...
1. **SWT (Standard Widget Toolkit)**:提供图形组件和布局管理,常替代Swing。 2. **JFace**:支持菜单、工具栏、对话框等,以及向导和字体管理。 3. **PDE (Plugin Development Environment)**:辅助插件开发的...
接着,使用GEF设计图形界面,定义图形元素的布局和行为。GEF会自动绑定到EMF模型,确保图形界面的实时更新和数据的一致性。这种模型-视图-控制器(MVC)的设计模式使得代码更易于维护和扩展。 虽然Eclipse 3.3版本...
- **GEF**:GEF则专注于图形用户界面的设计,特别是针对那些需要绘制复杂图形的应用程序,例如流程图编辑器、电路图设计工具等。 ### 关于Eclipse、SWT和JFace Eclipse、SWT(Standard Widget Toolkit)和JFace是...
这个插件特别适用于那些需要频繁调整UI布局或者对UI设计有高要求的项目。VisualEditor 1.4是该插件的一个特定版本,可能包含了一些特定的改进和修复,以适应Eclipse 3.4(Ganymede)的平台。 在使用VisualEditor ...