初識jGraph

來源:互聯網
上載者:User
初識jGraph

        在為老師寫項目的時候我急需一個基於java的圖形組件,第一次搜尋就搜尋到了jGraph。總體感覺還是挺容易上手的,是一套能夠應對多種圖形用途的工具。雖然我對其中一些編程的風格有些不是很滿意。不過能做出來就是好的!而且效果十分出色,感謝jGraph社團帶給我們的強大工具。
        最令我欣賞的是,jGraph在對需要使用jGraph Layout Pro的學術應用只收半價,這表現了國外對於學術研究的重視,是中國需要學習的。
   
jGraph簡介

        jGraph具有相當高的互動性和自動化,是一套為圖定做的組件。其主要用途是在一些需要表示圖結構的應用中,比如流程圖、UML、交通線路、網路等等。
        jGraph在本文撰寫時版本為5.8.0.0,可以在連結出找到jGraph的首頁。
        jGraph主要包括以下一些產品:
   
        JGraph - The Java Open Source Graph Drawing Component    ( 有Open Source )
        JGraph Layout Pro - The Java Graph Layout Solution
        JGraphpad Pro Diagram Editor Framework
        MxGraph Thin Client - JGraph in a browser!
   
        咱們只是學習嘛,當然只用jGraph咯。jGraph Layout Pro是一個對圖進行布局的軟體,看過DEMO後感覺好酷。jGraphed Pro 現在有WEB START的示範,似乎是拿來做jGraph的示範用,我在Solaris上也看到過jGraphed Pro的身影,是一套巨牛叉的圖形編輯軟體。 MxGraph Thin Client是利用Javascript 和 SVG 在XML通訊協議下的瀏覽器端的瘦客戶軟體,感覺也好厲害呀。
        jGraph對圖的操作包括:圖顯示、圖互動、圖布局、圖分析等。

        JGraph 的基本SWING 組件如下:

            org.jgraph Basic            JGraph 類
            org.jgraph.event            Graph 事件模型
            org.jgraph.graph             Graph 結構及結點
            org.jgraph.plaf                 Graph UI 委託組件
            org.jgraph.util                 常用的工具類

        補充一下,與jGraph類似的可用於繪圖的還有eclipse的GEF。

jGraph模型

        一張圖——JGraph 類 的主要結構:
            JGraph extends JComponent {
                org.jgraph.graph.GraphModel    model; (DefaultGraphModel)
                org.jgraph.plaf.GraphUI            ui; (BasicGraphUI)
                org.jgraph.graph.GraphLayoutCache        cache;
           }

        JGraph 除了SWING的MVC結構,即引用了MODEL和UI外,他還保持著一個奇怪的應用GraphLayoutCache。GraphLayoutCache 可以被看作是MODEL的一個擴充,它的作用是保證圖中各結點的狀態以及一些外觀等。因為圖的複雜性,使用一個GraphLayoutCache 可以用來處理這些複雜問題。
        配置JGraph可以使用一系列的set方法,有許多很有用的功能可以開關。

        圖的邏輯結構——GraphModel 類:
            滿足MVC的要求,GraphModel儲存著所有的圖中的對象,它的預設實現DefaultGraphModel能夠滿足一般的需求。
            GraphModel包含三個基本操作:insert() , edit() , remove() 。這些操作會起到與GraphLayoutCache相同的效果,但與GraphLayoutCache略微不同的是它的參數比較多,乍看下去比較麻煩。其實GraphModel所要求的只是結點的邏輯結構,對於結點的細節它並不關心。所以可以在初始化圖時使用GraphModel,不要常常用它的方法來對細節做修改,這既不方便,也沒必要。
            另外,就是GraphModel提供了許多get方法,可以很方便檢索相應的結點。

Cells

        JGraph 的單位(Cells) 有三種:Vertex、 Edge、 Port。
            Vertex 可以攜帶對象,由於JGraph是只負責表示的,並不真正負責資料的操作。那麼在圖形和資料間就需要一個使者,這就是Vertex ,Vertex 可以是文字、圖形等對象。
            Port 是一般比較陌生的單位,在圖的演算法中並不設計Port,但在圖形表示中它十分有用。如同它的名字,他是Vertex上的一個連接埠,可以通過連接埠串連其他Vertex,而在JGraph中Port還可以用於改變Edge的形狀等等。
            Edge 與圖演算法中的邊也有一點不同,Edge 是只能串連Port而不是Vertex的。這樣,因為多了Port單元,使得Edge更加靈活、更加豐富了。

        預設單元——DefaultCell:
            它是DefaultEdge和DefaultPort的父類,又是DefaultMutableTreeNode的子類,其地位可以相當於Vertex。一個DefaultCell可以攜帶一個UserObject。每個DefaultCell還有一個AttributeMap,負責它的屬性(顏色、大小等等)。用一套set方法可以修改AttributeMap。

        邊和連接埠單元——Edge、Port:
            除了繼承DefaultCell,Edge、Port還有一些專屬的方法。
            Edge有getSource() 和 getTarget() 方法,用以獲得邊的兩端的對象(一般為Port)。還一個路由類,定義了一些路由方法。
            Port 主要任務是承載Edge,所以有一些關於獲得Edge的方法。另外,Port還定義了獲得錨(比如一個Vertex中包含一個Port)的方法。

        Cell的處理:
            每個Cell包括Cell Object、Cell Renderer、Cell Editor、Cell Handle。其中Renderer負責Cell的表示,包括形狀等等。Editor 做Cell的修改用,當雙擊Cell後則調用Editor來編輯Cell。以上都是類似與JTable 和 JTree的。
            Handle 是SWING的組件中沒有的,它的任務是處理Cell的大小與移動。可以重寫paint()方法來指定經過滑鼠拖動所導致的Cell大小和位置變化。

            對於這些單元的屬性的控制,可以仔細看看GraphConstants這個類的set方法,基本上所有的屬性都是用這個類的set修改的。

小結

  •       通過GraphConstants可以設定大部分的屬性(我個人不喜歡這種方式)
  •      一個Cell類型的實體,可以設定view、 renderer、 editor、 handler。
  •         定製個人化的Cell ,需要繼承DefaultCell 後增加新的屬性和方法並實現他們,記得修改attributeMap,會有協助的,以及引用UserObject。
  •         還有一點,對於Cells只能調用插入、刪除、修改方法,無法對view調用。

連結

    jGraph:
        http://www.jgraph.com/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.