在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-II电场仪使用手册
GEF-ALL-3.7 GEF-ALL-3.8 官方包。 GEF Draw2d 学习资料
目前的最新的GEF,用于eclipse是实现可视化。
解压GEF-ALL-3.4.1.zip,得到一个eclipse文件夹,打开可看到: 下面有三个文件夹:features,plugins,readme 分别拷贝上面三个文件夹下面的内容把它们对应放到Eclipse安装目录D:\eclipse下面对应的同 名文件夹下...
GEF-ALL-3.1.zip eclipse
GEF-Update-5.3.3,eclipse4.18离线安装包,eclipse有自带gef,这个是增强包,可以不安装
GEF: Graphical Editing Framework <br>GEF是一套MVC Framework,它能帮你比较容易的...依赖:org.eclipse.draw2d*** 本软件GEF-ALL-3.2.2完整版包含(Draw2D, GEF and Zest) 大小:6.6M 请用于Eclipse3.2.2环境下.
将GEF-ALL-XX.zip解压缩,然后拷贝解压后的eclipse目录下的两个文件夹到 WINDOWS 下你的Eclipse安装目录。 UBuntu下到 usr/lib/eclispe和usr/share/eclipse, Merge合并所有的现有文件夹。
GEF-whole-upload.pdf附书源码
GEF-ALL-3.9.100.zip
GEF-SDK,eclipse pulgin
GEF-SDK-3.1.1.zip 可用的资源 大家有问题联系我。
最新gef eclipse ve
最新eclipse plugin GEF-runtime-3.6.2
GE智能平台 GEF-345A Proficy Historian开发培训pdf,GE智能平台 GEF-345A Proficy Historian开发培训
GEF插件解压,放入eclipse安装根目录下对应的文件夹下,重启eclipse
GEF-whole-upload.pdf GEF-whole-upload.pdf
ECLIPSE相关插件 解决eclipse安装插件时提示以下错误 Java代码 Software being installed: Maven Integration for Eclipse (Required) 0.12 .... Java代码 Software being installed: Maven Integration for ...
org.eclipse.gef 0.0.0 Eclipse 3.6.2 安装android adt时会用到
GEF 图形编辑框架,是Eclipse旗下一个重要的插件,用于开发图形界面。这是系列教程源码之三。