JFreeChart一个免费的Java图表库.JFreeChart支持饼图(2D和3D),条形图(水平和垂直,整齐堆叠),线图,散点图,时序图,

高低的开闭图,烛台图,甘特图,结合地块,温度计,刻度盘和更多。JFreeChart可以在应用程序中使用,小程序,servlet和JSP。

由于JFreeChart可以生成的图像很多,在此简要列举三个(饼图,柱状图,曲线图)作为入门,学习如何整合Struts如何显示在JSP中

一、搭建Struts

首先要有一个搭建好的Struts框架,在此基础上我们就可以开发使用JFreeChart了,

注:当然也完全可以不用Struts,在JSP中写java脚本一样可以运行JFreeChart,但为了规范性还是建议使用Struts

二、下载JFreeChart

JFreeChart是开放源代码的免费软件

本文使用的JFreeChart版本为jfreechart-1.0.17

三、环境配置

MyEclipse中新建一Web工程,将下载的jfreechart-1.0.17下lib目录下的jcommon-1.0.21.jar,jfreechart-1.0.17.jar

导入到工程下。另在web.xml文件中增加如下配置:

DisplayChart

org.jfree.chart.servlet.DisplayChart

DisplayChart

/DisplayChart

四、生成各种图表

★饼图DefaultPieDataset dpd = new DefaultPieDataset();

dpd.setValue("JDK1.4", 60);

dpd.setValue("JDK1.5", 15);

dpd.setValue("JDK1.6", 25);

dpd.setValue("JDK1.7", 25);

dpd.setValue("JDK1.8", 25);

JFreeChart chart = ChartFactory.createPieChart("开发者目前采用JDK版本分布", dpd, true,false, false);

String fileName = "";

try {

fileName = ServletUtilities.saveChartAsPNG(chart, 600, 500, session);

} catch (IOException e) {

e.printStackTrace();

}

//JSP页面显示的URL

pieChartURL = request.getContextPath() + "/DisplayChart?filename=" + fileName;

在JSP中 即可显示该饼图(下同)

★柱状图DefaultCategoryDataset dataset = new DefaultCategoryDataset();

dataset.addValue(42, "语言", "JAVA");

dataset.addValue(17, "语言", "C#");

dataset.addValue(14, "语言", "C++");

dataset.addValue(12, "语言", "C");

dataset.addValue(3, "语言", "PHP");

dataset.addValue(2, "语言", "JavsScript");

dataset.addValue(1, "语言", "Objective-C");

dataset.addValue(3, "语言", "Python");

dataset.addValue(4, "语言", "其他");

JFreeChart chart = ChartFactory.createBarChart3D("开发者第一编程语言分布情况", "开发语言",

"百分比", dataset, PlotOrientation.VERTICAL, false, false,false);

String fileName = "";

try {

fileName = ServletUtilities.saveChartAsPNG(chart, 700, 500,null, session);

} catch (IOException e) {

e.printStackTrace();

}

barChartURL = request.getContextPath() + "/DisplayChart?filename=" + fileName;[object Object]

★曲线图

TimeSeries timeSeries = new TimeSeries("最近30天流量趋势", Day.class);

TimeSeriesCollection lineDataset = new TimeSeriesCollection();

timeSeries.add(new Day(01, 06, 2014), 10200);

timeSeries.add(new Day(05, 06, 2014), 11200);

timeSeries.add(new Day(10, 06, 2014), 12000);

timeSeries.add(new Day(15, 06, 2014), 13200);

timeSeries.add(new Day(20, 06, 2014), 11600);

timeSeries.add(new Day(25, 06, 2014), 13200);

timeSeries.add(new Day(30, 06, 2014), 12500);

lineDataset.addSeries(timeSeries);

JFreeChart chart = ChartFactory.createTimeSeriesChart("访问量统计时间线", "月份", "访问量", lineDataset, true, true, true);

XYPlot plot = chart.getXYPlot();

//设置网格背景颜色

plot.setBackgroundPaint(Color.white);

//设置网格竖线颜色

plot.setDomainGridlinePaint(Color.LIGHT_GRAY);

//设置网格横线颜色

plot.setRangeGridlinePaint(Color.LIGHT_GRAY);

//设置主标题

chart.setTitle(new TextTitle("最近30天流量趋势"));

chart.setAntiAlias(true);

String fileName = "";

try {

fileName = ServletUtilities.saveChartAsPNG(chart, 600, 500, null, session);

} catch (IOException e) {

e.printStackTrace();

}

graphChartURL = request.getContextPath() + "/DisplayChart?filename=" + fileName;

五、乱码问题

在图表生成时可能会发生乱码,解决方法如下:StandardChartTheme standardChartTheme = new StandardChartTheme("CN");

standardChartTheme.setExtraLargeFont(new Font("隶书", Font.BOLD, 20));

standardChartTheme.setRegularFont(new Font("宋书", Font.PLAIN, 15));

standardChartTheme.setLargeFont(new Font("宋书", Font.PLAIN, 15));

ChartFactory.setChartTheme(standardChartTheme);

在使用的过程中如果报以下错误:org.apache.struts2.dispatcher.Dispatcher warn

警告: Could not find action or result: /jfreechart/DisplayChart?filename=jfreechart-4239939260100283845.png

There is no Action mapped for namespace [/] and action name [DisplayChart] associated with context path

[/jfreechart]. - [unknown location]

而在jsp中显示不出来图片,则原因是Struts配置错误。

因为在后台生成图片的时候有这么一句话request.getContextPath() + "/DisplayChart?filename=" + fileName;

我们用chorme查看图片路径的时候也可以看到

走的是servlet 这个路径被Struts拦截了(因为struts配置的拦截为/*) 所以找不到对应的action or result

修改web.xml

struts2

/admin/*

至此JFreeChart的基本使用就完成了,这只是简单的图表显示,如需要更复杂功能参考其他文章。

将项目导入到myeclipse中 启动tomcat 浏览器中输入http://localhost:8088/jfreechart/index.jsp 即可演示程序.

jfreechart php,JFreeChart的使用详解相关推荐

  1. Jfreechart中文API和属性详解

    JfreeChart 中文API 要想绘制出漂亮的图表,就必须了解图表的构成部分,将图表进行分解成N个部分. 然后再对每一个部分进行渲染,设置样式:包括背景色.轮廓线条样式和颜色.填充颜色.字体大小. ...

  2. python 自动化发送邮件_Python自动化必备发送邮件报告脚本详解

    #!/usr/bin/python3 # -*- coding:UTF-8 -*- import smtplib #smtplib库主要用来连接第三方smtp库,用来发邮件 from email.mi ...

  3. 从命令行到IDE,版本管理工具Git详解(远程仓库创建+命令行讲解+IDEA集成使用)

    首先,Git已经并不只是GitHub,而是所有基于Git的平台,只要在你的电脑上面下载了Git,你就可以通过Git去管理"基于Git的平台"上的代码,常用的平台有GitHub.Gi ...

  4. JVM年轻代,老年代,永久代详解​​​​​​​

    秉承不重复造轮子的原则,查看印象笔记分享连接↓↓↓↓ 传送门:JVM年轻代,老年代,永久代详解 速读摘要 最近被问到了这个问题,解释的不是很清晰,有一些概念略微模糊,在此进行整理和记录,分享给大家.在 ...

  5. docker常用命令详解

    docker常用命令详解 本文只记录docker命令在大部分情境下的使用,如果想了解每一个选项的细节,请参考官方文档,这里只作为自己以后的备忘记录下来. 根据自己的理解,总的来说分为以下几种: Doc ...

  6. 通俗易懂word2vec详解词嵌入-深度学习

    https://blog.csdn.net/just_so_so_fnc/article/details/103304995 skip-gram 原理没看完 https://blog.csdn.net ...

  7. 深度学习优化函数详解(5)-- Nesterov accelerated gradient (NAG) 优化算法

    深度学习优化函数详解系列目录 深度学习优化函数详解(0)– 线性回归问题 深度学习优化函数详解(1)– Gradient Descent 梯度下降法 深度学习优化函数详解(2)– SGD 随机梯度下降 ...

  8. CUDA之nvidia-smi命令详解---gpu

    nvidia-smi是用来查看GPU使用情况的.我常用这个命令判断哪几块GPU空闲,但是最近的GPU使用状态让我很困惑,于是把nvidia-smi命令显示的GPU使用表中各个内容的具体含义解释一下. ...

  9. Bert代码详解(一)重点详细

    这是bert的pytorch版本(与tensorflow一样的,这个更简单些,这个看懂了,tf也能看懂),地址:https://github.com/huggingface/pytorch-pretr ...

  10. CRF(条件随机场)与Viterbi(维特比)算法原理详解

    摘自:https://mp.weixin.qq.com/s/GXbFxlExDtjtQe-OPwfokA https://www.cnblogs.com/zhibei/p/9391014.html C ...

最新文章

  1. datatables设置解析
  2. 为什么k8s中docker容器的启动命令必须是前台执行?
  3. 如何查看数据文件或者Log文件是否增长过?
  4. 电磁波传播相位是否会变化_相位常数β与波数k是一回事吗?
  5. 用c语言计算2的n次方,计算2的N次方........有什么错吗?
  6. Springboot与Ajax整合练习?
  7. 【资源】编程珠玑I 源码
  8. es6解构--简化代码
  9. java怎么模拟查询账户余额_spring boot + mybatis 模拟银行系统余额查询、转账、存取钱功能实现...
  10. 这是 iPhone 6主板?包含 802.11ac WiFi、NFC 芯片
  11. 网页对话框:window.showModalDialog的基本用法
  12. 云计算是用来做什么的
  13. android gridview textview,gogo体育官方网站-gogo体育官方网站
  14. 在PS中快速制作发朋友圈的九宫格切图
  15. php 删除文件 unlink,如何使用php unlink删除文件
  16. ps制作html网页的跳转,PS图片转页面CSS+HTML的步骤
  17. 深扒联易融招股书:毛利率高、研发占比低,近三年合计亏约30亿
  18. 计算机del键作用,计算机里的英文字母“DEL”键是干什么用的
  19. docker搭建mysql主从复制
  20. Redis安装(Ubuntu)

热门文章

  1. 分享CSS3里box-shadow属性的使用方法,包括内阴影box-shadow:inset
  2. DigiNotar申请破产
  3. EditText简介
  4. css两个盒子之间只显示一条边框_css如何去掉重叠部分的边框?
  5. 介绍几种常见的对焦基本原理
  6. CANfd 一次采样点和二次采样点
  7. HP 6531s系列笔记本开启硬件虚拟化技术(Intel VT)的方法
  8. 解决mmdetection显示mask的问题
  9. linux 协议栈之socket,Linux TCP/IP 协议栈之 Socket 的实现分析(一)
  10. CMS用通用图片轮换flash幻灯片播放器:Bcastr3和Bcastr4