JUNG:一个用Java来建模、分析和做可视化图表的框架
openkk
13年前
例如网络管理、人际关系网络、思维脑图、地理导航以及多种游戏等,在本质上都是对“图”的计算;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); } }JUNG对图、树、森林等数据结构的计算和可视化提供了完整的基础支持,大大的提高相关应用软件的实现进度;同时JUNG在图树算法、交互支持、可视化布局等方面有着强大功能,不足的地方是,其API的文档不够齐全,有些内容甚至严重过期,因此需要参考其源码(可以在Source Forge下载)进行工作。http://jung.sourceforge.net/applet/index.html中更有多个内容丰富的样例可供参考;