Welcome 微信登录

首页 / 软件开发 / JAVA / [Eclipse]GEF入门系列(五、浅谈布局)

[Eclipse]GEF入门系列(五、浅谈布局)2011-04-19 cnblogs bjzhanghao虽然很多GEF应用程序里都会用到连接(Connection),但也有一些应用是不需要用连接 来表达关系的,我们目前正在做的这个项目就是这样一个例子。在这类应用中,模型对象间 的关系主要通过图形的包含来表达,所以大多是一对多关系。

图1 不使用连接的GEF应用

先简单描述一下我们这个项目,该项目需要一个图形化的模型编辑器,主要功能是在一个 具有三行N列的表格中自由增加/删除节点,节点可在不同单元格间拖动,可以合并相邻节点 ,表格列可增减、拖动等等。由于SWT/Jface提供的表格很难实现这些功能,所以我们选择了 使用GEF开发,目前看来效果还是很不错的(见下图),这里就简单介绍一下实现过程中与图 形和布局有关的一些问题。

在动手之前首先还是要考虑模型的构造。由于Draw2D只提供了很有限的Layout,如 ToolbarLayout、FlowLayout和XYLayout,并没有一个GridLayout,所以不能把整个表格作为 一个EditPart,而应该把每一列看作一个EditPart(因为对列的操作比对行的操作多,所以 不把行作为EditPart),这样才能实现列的拖动。另外,从需求中可以看出,每个节点都包 含在一个列中,但仔细再研究一下会发现,实际上节点并非直接包含在列中,而是有一个单 元格对象作为中间的桥梁,即每个列包含固定的三个单元格,每个单元格可以包含任意个节 点。经过以上分析,我们的模型、EditPart和Figure应该已经初步成形了,见下表:

 模型EditPartFigure
画布DiagramDiagramPartFreeformLayer
ColumnColumnPartColumnFigure
单元格CellCellPartCellFigure
节点NodeNodePartNodeFigure

表中从上到下是包含关系,也就是一对多关系,下图简单显示了这些关系:

图2 图形包含关系图