JUNG:一个用Java来建模、分析和做可视化图表的框架

openkk 12年前

例如网络管理、人际关系网络、思维脑图、地理导航以及多种游戏等,在本质上都是对“图”的计算;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中更有多个内容丰富的样例可供参考;