JUNG:一個用Java來建模、分析和做可視化圖表的框架

openkk 13年前發布 | 86K 次閱讀 Java 圖形/圖像處理

例如網絡管理、人際關系網絡、思維腦圖、地理導航以及多種游戲等,在本質上都是對“圖”的計算;JUNG就是專為圖(Graph)的計算和可視化提供的一個通用的可擴充的Java編程平臺。

只找到一個API在線地址:http://jung.sourceforge.net/doc/api/
JUNG(Java Universal Network/Graph framework)是一個Java開源項目,其目的在于為開發關于圖或網絡結構的應用程序提供一個易用、通用的基礎架構。使用JUNG功能調用,可以方便的構造圖或網絡的數據結構,應用經典算法(如聚類、最短路徑,最大流量等),編寫和測試用戶自己的算法,以及可視化的顯示數據的網絡圖。

package test;

import java.awt.*;

import javax.swing.*;

import org.apache.commons.collections15.Transformer; //http://faithlee.iteye.com/blog/1420065 import edu.uci.ics.jung.graph.; import edu.uci.ics.jung.graph.util.EdgeType; import edu.uci.ics.jung.algorithms.layout.; import edu.uci.ics.jung.visualization.BasicVisualizationServer; import edu.uci.ics.jung.visualization.VisualizationViewer; import edu.uci.ics.jung.visualization.control.DefaultModalGraphMouse; import edu.uci.ics.jung.visualization.control.ModalGraphMouse.Mode; import edu.uci.ics.jung.visualization.decorators.ToStringLabeller;

public class Test1To5 extends JFrame {

@SuppressWarnings("unchecked")
public Test1To5() {
    this.setTitle("示例");
    this.setFont(new Font("Times New Roman", Font.PLAIN, 12));
    this.setBackground(Color.white);// 設置窗口背景顏色
    // 初始化圖g
    SparseGraph g = new SparseGraph();

    for (int i = 1; i < 10; i++) {
        g.addVertex(i);
        g.addEdge("Edge[1," + (i + 1) + "]", 1, i + 1);
        if (i > 1) {
            g.addEdge("Edge[" + i + "," + (i + 1) + "]", i, i + 1);
        }
    }

//http://faithlee.iteye.com/blog/1420065 System.out.println("The graph g = " + g.toString()); // 使用該圖創建布局對象 // Layout layout = new CircleLayout(g);//圓形布局結構 Layout layout = new FRLayout2(g); // 使用布局對象創建BasicVisualizationServer對象 // BasicVisualizationServer vv = new BasicVisualizationServer(layout); VisualizationViewer<Integer, Paint> vv = new VisualizationViewer<Integer, Paint>( layout);

    // 渲染環境 顏色參數
    Transformer<Integer, Paint> vertexPaint = new Transformer<Integer, Paint>() {
        public Paint transform(Integer s) {
            if (s == 1)
                return Color.green;
            else
                return Color.YELLOW;
        }

    };

    // 設置頂點文本標簽
    vv.getRenderContext().setVertexLabelTransformer(new ToStringLabeller());
    // 設置頂點顏色
    // vv.getRenderContext().setVertexFillPaintTransformer(vertexPaint);
    // 設置邊的文本標簽
    vv.getRenderContext().setEdgeLabelTransformer(new ToStringLabeller());
    // 設置邊的線型
    // vv.getRenderContext().setEdgeStrokeTransformer();

    DefaultModalGraphMouse<Integer, Paint> gm = new DefaultModalGraphMouse<Integer, Paint>();
    gm.setMode(Mode.PICKING);
    vv.setGraphMouse(gm);
    // 將上述對象放置在一個Swing容器中并顯示之
    getContentPane().add(vv);
    pack();
}

public static void main(String[] args) {
    Test1To5 myframe = new Test1To5();
    myframe.setExtendedState(JFrame.MAXIMIZED_BOTH);
    myframe.setVisible(true);
}

}</pre>JUNG對圖、樹、森林等數據結構的計算和可視化提供了完整的基礎支持,大大的提高相關應用軟件的實現進度;同時JUNG在圖樹算法、交互支持、可視化布局等方面有著強大功能,不足的地方是,其API的文檔不夠齊全,有些內容甚至嚴重過期,因此需要參考其源碼(可以在Source Forge下載)進行工作。http://jung.sourceforge.net/applet/index.html中更有多個內容豐富的樣例可供參考;

 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!