介绍
是一个Java开源项目,其目的在于为开发关于图或网络结构的应用程序提供一个易用、通用的基础架构。使用JUNG功能调用,可以方便的构造图或网络的数据结构,应用经典算法(如聚类、最短路径,最大流量等),编写和测试用户自己的算法,以及可视化的显示数据的网络图。
1. 图数据结构
ParseMultiGraph 和ParseDirectedGraph,这两个类支持参数化,可以传入自定义的 vertex和edge类
2. 图算法
两点间最短路径
最大流
3. 图形可视化
BasicVisualizationServer 是显示图形的基本类,实现接口 VisualizationServer,继承swing的JPanel 类,作为graph显示的画布
Layout接口和 edu.uci.ics.jung.algorithms.layout下的类 完成布局。
显示图形的最少内容(参考SimpleGraphView.java 类):
1. graph数据结构
2. layout的实现,如CircleLayout
3. BasicVisualizationServer
4. 基本的GUI 组件,如 swing JFrame
为边和线着色、label
Renderer: 画edges, edges label ,vertext, vertex label ;RenderContext提供参数
参考 SimpleGraphView2.java
4. 获得交互
鼠标交互:根据赋值的mode 有不同的行为,包括 picking, zooming, transforming(rotation, shearing), translating(panning) , editing(adding/deleting nodes and edges)
zoom和transform graph
DefaultModalGraphMouse 提供 picking和transforming能力
参考: InteractiveGraphView1.java
根据 键盘输入改变mouse mode (key listeners)
参考: InteractiveGraphView2.java
图形编辑: add vertics和node 交互
EditingModalGraphMouse和 Factory和Factory的继承类
用户通过鼠标决定vertices的位置,则使用 StaticLayout
参考 EditingGraphView1.java
通过edge和vertext的属性菜单进行编辑
参考 GraphElements.java PopupVertexEdgeMenuMousePlugin.java VertextMenuListener.java EdgeMenuListener.java MenuPointListener.java MyMouseMenus.java DeleteEdgeMenuItem.java DeleteVertexMenuItem.java EditorMouseMenu.java EdgePropertyDialog.java
参考网址:
http://jung.sourceforge.net/