[轉]再談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管理 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章