JUNG:一個用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中更有多個內容豐富的樣例可供參考;