组概念
在图的表示中,有时我们需要描述一组有相关特性的点或线,这时,引入组的概念。组由一组Cell组成的,而组本身也是一个Cell。也就是说jGraph用了父与子的树型结构描述了组和组中的成员的关系。这样,对于组的操作就可以像对一般的单元(点、线、port)一样了,即拖动、放大/缩小等等。
jGraph提供了一组丰富的API来建立组和成员的关系,包括对某GraphCell使用add()将其他成员变为自己的子成员;构造函数将子成员加入;GraphLayoutCache的insertGroup()方法。
ParentMap是定义父与子关系的工具,他可以作为GraphModel 和 GraphLayoutCache一个属性,通过edit和insert方法来修改。同时他也可以用addEntry()方法建立父子关系。
GraphCell的remove()方法可以删除一个子成员,对于该子成员的子成员则自动转为该组的根的子成员。
在设置了setMoveIntoGroups()和setMoveOutOfGroups后,可以直接将单元拖入组中成为子成员,也可以将子成员拖出组。
GraphConstants.setInset()可以设置组的边框与组成员的距离。
连接集
连接集可以理解为边的集合,两个Port之间是一条边(连接),连接集是一组这样的连接,以便于管理和修改。他有一个内部类Connection可以用来构造一个连接。
连接集的设计思想类似ParentMap,是作为一个管理图的关系的工具来使用的。
图象布局缓冲
就是GraphLayoutCache,不知道翻译得对不对,反正知道意思就行了。
GraphLayoutCache可是重中之重,他描述得主要是CellView,也就是单元的视图,不过因为与GraphModel有着很深的联系,所以GraphLayoutCache中也提供了大量类似甚至强与GraphModel的函数。
在GraphLayoutCache构造函数中的partial参数可以保证使GraphLayoutCache的修改可以覆盖掉GraphModel的内容。设置该参数为true,可以保证对GraphLayoutCache的任何修改可以直接在视图中表示出来,而在设置为true之后,对于在GraphModel中插入单元则不会直接显示出效果。
Visibility的问题:在GraphLayoutCache中可以方便的设置某些单元的visibility,但是有些问题是比较棘手的,例如对于一个端点不可见而另一个端点可见的边是可见还是不可见,GraphLayoutCache提供了showsExistingConnections() 、hidesExistingConnections()、showsChangedConnections()、hidesChangedConnections()等方法,可以灵活应对这些情况。
设置LocalAttribute可以覆盖掉CellView中默认的属性。
GraphLayoutCache().collapse(graph.getSelectionCells());
GraphLayoutCache().expand(graph.getSelectionCells());
两个方法是用来对一个组折叠和展开的,折叠后的组就是一个框,展开后就是原来的各个子成员都显示在视图中。
其他一些有意思的特性:
autoSizeOnValueChange :不同于autoSize属性的地方是使用这个函数后仍可以对大小进行修改。
selectsAllInsertedCells :选择所有的单元。
selectsLocalInsertedCells :选择所有视图上、不包括hidden的单元。
高级模型功能
模型的序列是按照插入单元的顺序来决定的,对于先插入的最后显示在底层,后插入的显示在顶层。为了改变单元显示的层次,可以使用GraphModel和GraphLayoutCache的toFront()和toBack()函数,注意在用GraphLayoutCache使必须保证其构造参数partial为true。
GraphModelEdit表示一次修改动作,用UndoableEditListeners就能监测到修改的动作,最后用GraphUndoManager进行管理,用Undo/Redo的模式来操作就没问题了。
拖与拉
在jGraph中setDropEnabled() 和setDragEnabled()可以是拖拉操作变得有效。另外,对应于swing的TransferHandler,在jGraph中需要继承GraphTransferHandler来实现拖拉时的数据处理。
小结
在图的表示中,有时我们需要描述一组有相关特性的点或线,这时,引入组的概念。组由一组Cell组成的,而组本身也是一个Cell。也就是说jGraph用了父与子的树型结构描述了组和组中的成员的关系。这样,对于组的操作就可以像对一般的单元(点、线、port)一样了,即拖动、放大/缩小等等。
jGraph提供了一组丰富的API来建立组和成员的关系,包括对某GraphCell使用add()将其他成员变为自己的子成员;构造函数将子成员加入;GraphLayoutCache的insertGroup()方法。
ParentMap是定义父与子关系的工具,他可以作为GraphModel 和 GraphLayoutCache一个属性,通过edit和insert方法来修改。同时他也可以用addEntry()方法建立父子关系。
GraphCell的remove()方法可以删除一个子成员,对于该子成员的子成员则自动转为该组的根的子成员。
在设置了setMoveIntoGroups()和setMoveOutOfGroups后,可以直接将单元拖入组中成为子成员,也可以将子成员拖出组。
GraphConstants.setInset()可以设置组的边框与组成员的距离。
连接集
连接集可以理解为边的集合,两个Port之间是一条边(连接),连接集是一组这样的连接,以便于管理和修改。他有一个内部类Connection可以用来构造一个连接。
连接集的设计思想类似ParentMap,是作为一个管理图的关系的工具来使用的。
图象布局缓冲
就是GraphLayoutCache,不知道翻译得对不对,反正知道意思就行了。
GraphLayoutCache可是重中之重,他描述得主要是CellView,也就是单元的视图,不过因为与GraphModel有着很深的联系,所以GraphLayoutCache中也提供了大量类似甚至强与GraphModel的函数。
在GraphLayoutCache构造函数中的partial参数可以保证使GraphLayoutCache的修改可以覆盖掉GraphModel的内容。设置该参数为true,可以保证对GraphLayoutCache的任何修改可以直接在视图中表示出来,而在设置为true之后,对于在GraphModel中插入单元则不会直接显示出效果。
Visibility的问题:在GraphLayoutCache中可以方便的设置某些单元的visibility,但是有些问题是比较棘手的,例如对于一个端点不可见而另一个端点可见的边是可见还是不可见,GraphLayoutCache提供了showsExistingConnections() 、hidesExistingConnections()、showsChangedConnections()、hidesChangedConnections()等方法,可以灵活应对这些情况。
设置LocalAttribute可以覆盖掉CellView中默认的属性。
GraphLayoutCache().collapse(graph.getSelectionCells());
GraphLayoutCache().expand(graph.getSelectionCells());
两个方法是用来对一个组折叠和展开的,折叠后的组就是一个框,展开后就是原来的各个子成员都显示在视图中。
其他一些有意思的特性:
autoSizeOnValueChange :不同于autoSize属性的地方是使用这个函数后仍可以对大小进行修改。
selectsAllInsertedCells :选择所有的单元。
selectsLocalInsertedCells :选择所有视图上、不包括hidden的单元。
高级模型功能
模型的序列是按照插入单元的顺序来决定的,对于先插入的最后显示在底层,后插入的显示在顶层。为了改变单元显示的层次,可以使用GraphModel和GraphLayoutCache的toFront()和toBack()函数,注意在用GraphLayoutCache使必须保证其构造参数partial为true。
GraphModelEdit表示一次修改动作,用UndoableEditListeners就能监测到修改的动作,最后用GraphUndoManager进行管理,用Undo/Redo的模式来操作就没问题了。
拖与拉
在jGraph中setDropEnabled() 和setDragEnabled()可以是拖拉操作变得有效。另外,对应于swing的TransferHandler,在jGraph中需要继承GraphTransferHandler来实现拖拉时的数据处理。
小结
- 组概念也是jGraph中的图结构的组成部分之一,它的表现方式是类似与树的父与子方式。
- 一种新的有效的表示图结构和连接关系的方法是利用ParentMap和ConnectionSet。
- GraphCacheLayout可以被设置为部分化(partial)以便隐藏和显示一些单元。
- 每个单元可以配置自己的属性以覆盖LocalAttribute。
- Undo/Redo功能是符合swing的一些设计标准的。
- 每一个修改都会被监测器监测到,以做Undo/Redo管理