[转]再谈jGraph

组概念

    在图的表示中,有时我们需要描述一组有相关特性的点或线,这时,引入组的概念。组由一组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管理 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章