几个JAVA图形化库的下载及简单介绍

前段时间做了一个JAVA大实验,要求使用第三方库可视化一个轨道系统,借这个机会(被迫)了解了几个第三方图形化库,简单介绍一下它们的用途和配置:

JUNG

JUNG是一个图算法库,至今已经快十年没维护了,因此网上能找到的资料少之又少。
jar包下载地址:https://sourceforge.net/projects/jung/files/
官方网站:http://jung.sourceforge.net/index.html
简单的例子:

package com.vainolo;
 
import java.awt.Dimension;
import javax.swing.JFrame;
import edu.uci.ics.jung.algorithms.layout.CircleLayout;
import edu.uci.ics.jung.graph.DirectedSparseGraph;
import edu.uci.ics.jung.visualization.VisualizationImageServer;
 
public class JungLearning {
  public static void main(String[] args) {
    DirectedSparseGraph g = new DirectedSparseGraph();//新建一个有向图
    g.addVertex("Vertex1");
    g.addVertex("Vertex2");
    g.addVertex("Vertex3");
    g.addEdge("Edge1", "Vertex1", "Vertex2");
    g.addEdge("Edge2", "Vertex1", "Vertex3");
    g.addEdge("Edge3", "Vertex3", "Vertex1");
    VisualizationImageServer vs =
      new VisualizationImageServer(
        new CircleLayout(g), new Dimension(200, 200));//新建VisualizationImageServer,接受两个参数,第一个为布局,第二个为尺寸
 
    JFrame frame = new JFrame();//打包放入JFrame
    frame.getContentPane().add(vs);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setVisible(true);
  }
}

显示如下:

JUNG的优点在于添加顶点和边比较方便,缺点在于教程太少,即使是能看的例子都很少,想深入研究只能看官方给的文档,如果想应用于轨道系统建模要重写Layout布局,改变点的分布。

JGraphT/JGraph

JGraphT/JGraph是用于图论和图算法的库,偏重于算法而不是可视化,网上教程较少。
配置教程地址:https://github.com/jgrapht/jgrapht/wiki/How-to-use-JGraphT-as-a-dependency-in-your-projects#developing-using-eclipse
官方网站地址:https://jgrapht.org/
JGraph的优点在于内部实现了多种图算法,如遍历算法,最小生成树算法等,非常适合用于计算,缺点则在可视化方面做的不是很好,我没研究出有什么方法能控制点的位置,这对轨道系统建模是致命的打击,因为无法控制物体统一在一条轨道上。

JFreechart

功能很强大的图表库,画柱状图、饼图、折线图等非常好用。
官方网站:http://www.jfree.org/jfreechart/
jar包下载地址:https://sourceforge.net/projects/jfreechart/files/
最坑的是!最坑的是! 用户指南是要钱的!要钱的!,而且还不便宜几个JAVA图形化库的下载及简单介绍_第1张图片
官方API和样例给的倒挺全,但听这名字就知道跟轨道建模没啥关系了

Prefuse

同样是很强大的图算法库,经常被拿来和JUNG比较,但个人认为图形化方面prefuse做的比JUNG好很多,代价就是实现图形化的过程非常复杂。
咱也不知道官网咋回事,进去都是新闻,找不到任何资料,挂几个别的地方找到的东西
应该是官方github:https://github.com/prefuse/Prefuse
clone到本地后运行build脚本,就会在lib文件夹里生成jar包,打包前的源代码都在src中,最惊喜的是提供了很多种demo,几乎覆盖了所有用途,深入研究demo代码比直接看API文档舒服多了,另附一个博主写的一系列prefuse教程,写的很不错:
https://www.cnblogs.com/bigdataZJ/p/VisualizationPrefuse1.html
https://www.cnblogs.com/bigdataZJ/p/VisualizationPrefuse2.html
https://www.cnblogs.com/bigdataZJ/p/VisualizationPrefuse3.html
https://www.cnblogs.com/bigdataZJ/p/VisualizationSoloShow4.html
https://www.cnblogs.com/bigdataZJ/p/VisualizationSoloShow5.html
https://www.cnblogs.com/bigdataZJ/p/VisualizationSoloShow6.html
但前面提到了,实现可视化的过程非常复杂,要经过数据读入(可从数据库读入或手动建立)->创建数据中心Visualization->配置渲染工厂->添加处理动作->添加交互->加入到JFrame,才可以可视化一个图,不过好不容易找到了教程样例文档都全的一个库,当然要好好研究一下。

从建立图到展示的过程教程给出了详细过程,这里不多赘述,只来谈谈如何排列点使其具有一定规律。
研究demo我发现布局(Layout)会影响点的排列,prefuse提供了很多原生布局,包括圆形布局、径向树布局等等,但都不能建模轨道系统,于是我参考其他布局的源码重写实现了自己的布局用于建模轨道,已经可以做到这样:
几个JAVA图形化库的下载及简单介绍_第2张图片
和轨道系统很接近了吧,只差圆形轨道了,但气就气在圆形轨道我根本就画不出来!前前后后弄这个花了将近一周时间,最终还是没看懂底层源码,没办法画出轨道,无奈ddl将近放弃prefuse转用JFrame+Graphics去实现了,结果发现异常的好用。
最终结论,如果对小型系统进行建模,不需要利用第三方库进行复杂的计算(比如说图算法),强烈推荐直接用JAVA自带的图形化JFrame直接实现,因为实现细节都看得清清楚楚,不用花时间去看特别多的源码。

你可能感兴趣的:(几个JAVA图形化库的下载及简单介绍)