由于myCell和cellAttribute相联,对cellAttribute赋值也就影响到了myCell。上面第一行代码设置了单元的背景颜色,第二行代码决定了单元是不透明的,第三行为这个单元设置了一个Border对象border。最后一行代码设置了border的颜色。
下面两行代码用于为顶点cell1构建Port对象。Port对象是单元的一个连接点:
DefaultPort port1 = new DefaultPort();
cell1.add(port1);
边线可以通过接触连接点的方式与一个顶点相联。下面的代码构建了一个DefaultEdge对象:
DefaultEdge myEdge = new DefaultEdge(name);
Map edgeAttribute = GraphConstants.createMap();
myAttribute.put(myEdge, edgeAttribute);
GraphConstants.setLineEnd(edgeAttribute, lineEnd);
GraphConstants.setEndFill(edgeAttribute, isEndFill);
上面的第四行代码设置边线的终点为箭头,第五行代码设置边线端点的填充颜色。如果你想得到一个双箭头边线,你可以使用下面的代码:
GraphConstants.setLineBegin(edgeAttribute, GraphConstants.ARROW_CLASSIC);
上面一行代码使得边线的起点是白色箭头而终点为黑色箭头。下面的三行代码把以前创建的端点、边线和端口插入到数据模型来让JGraph显示出来:
ConnectionSet cs = new ConnectionSet(edge, source, target);
Object[] cells = new Object[]{edge, srcCell, tgtCell};
myModel.insert(cells, myAttribute, cs, pm, e);
第一行代码创建一个用以描述连接的对象,这里所说的连接包括了一条边线、对象边线和边线两端的端点(起点和终点)。ConnectionSet对象是涉及到连接的一组对象的集合。一个连接包括一条边线、以及该边线的起点和终点。第二行代码创建了一个数组来保存用到的单元。单元包括顶点和边线。
第三行依次把单元、图形的属性表、连接、图形中父元素与子元素的关系、以及一组已经完成操作插入到数组中去。在执行完这个语句之后,它把这个插入事件通知给模型监听者(listener)和撤销操作监听者(undo listener)。这个语句可以认为是对图形操作结束。
一幅图胜过千言万语
JGraph是一个简单灵活的显示图形信息的组件。本文所列举的功能只是JGraph的最基本的功能。JGraph网站提供了一套教程。该教程假设读者已经有了理解本文所涉及的操作的水平。因此,你应该熟悉本文所涉及的基本技巧,然后再按照教程学习高级技巧,高级技巧包括定制鼠标事件、改变图形的视图以及把GXL文件转换为SVG文件等等。
