分享
 
 
 

JFreeChart学习笔记

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

JFreeChart中几个核心的对象类:

JFreeChart

JFreeChart中几个核心的对象类:

类名

类的作用以及简单描述

JFreeChart

图表对象,任何类型的图表的最终表现形式都是在该对象进行一些属性的定制。JFreeChart引擎本身提供了一个工厂类用于创建不同类型的图表对象

XXXXXDataset

数据集对象,用于提供显示图表所用的数据。根据不同类型的图表对应着很多类型的数据集对象类。常用的数据集对象有:柱状图数据集对象DefaultCategoryDataset、饼图数据集对象DefauldPieDataset和曲线图数据集对象DefaultTableXYDataset

XXXXXPlot

图表区域对象,基本上这个对象决定着什么样式的图表,创建该对象的时候需要Axis、Renderer以及数据集对象的支持。常用的Plot对象有:柱状图CategoryPlot、饼图PiePlot和曲线图XYPlot。

XXXXXAxis

用于处理图表的两个轴:纵轴和横轴。常用的有NumberAxis数据轴,DateAxis日期轴。

XXXXXRenderer

负责如何显示一个图表对象。常用的Renderer有DefaultCategoryItemRenderer 柱状图显示器StandardXYItemRenderer曲线图显示器。饼图的Renderer

XXXXXURLGenerator

用于生成Web图表中每个项目的鼠标点击链接。常用的URLCenerator有StandardCategoryURLGenerator

StandardPieURLGenerator

StandardXYURLGenerator

XXXXXToolTipGenerator

用于生成图象的帮助提示,不同类型图表对应不同类型的工具提示类。常用的有:StandardXYToolTipGenerator

StandardCategoryToolTipGenerator

StandardPieItemLabelGenerator

一般的创建图表的过程为:

1. 从数据库里读取数据

2. 将数据保存到图表对应的数据集对象中

3. 创建坐标轴对象

4. 创建Renderer对象

5. 创建Plot对象

6. 创建JfreeChart对象

7. 生成图片文件(或者二进制流)

以JfreeChart提供的Web应用的例子来说明一下以上几个步骤:

一.柱图。

public static String generateBarChart(Date hitDate, HttpSession session, PrintWriter pw) {

String filename = null;

try {

// Retrieve list of WebHits

WebHitDataSet whDataSet = new WebHitDataSet();

ArrayList list = whDataSet.getDataBySection(hitDate);//获得数据集

// Throw a custom NoDataException if there is no data

if (list.size() == 0) {

System.out.println("No data has been found");

throw new NoDataException();

}

// Create and populate a CategoryDataset

Iterator iter = list.listIterator();

DefaultCategoryDataset dataset = new DefaultCategoryDataset();

while (iter.hasNext()) {

WebHit wh = (WebHit)iter.next();

dataset.addValue(new Long(wh.getHitCount()), "Hits", wh.getSection());

}//将数据集保存到Dataset对象

// Create the chart object

CategoryAxis categoryAxis = new CategoryAxis("");

ValueAxis valueAxis = new NumberAxis("");//创建坐标轴

BarRenderer renderer = new BarRenderer();//创建Renderer

renderer.setItemURLGenerator(new StandardCategoryURLGenerator("xy_chart.jsp","series","section"));//创建URLGenerator.再不需要连接的情况下将第一个参数设置成"###"就可以了

renderer.setToolTipGenerator(new StandardCategoryToolTipGenerator());//创建提示标签

Plot plot = new CategoryPlot(dataset, categoryAxis, valueAxis, renderer);//创建图表区域对象

JFreeChart chart = new JFreeChart("", JFreeChart.DEFAULT_TITLE_FONT, plot, false);

chart.setBackgroundPaint(java.awt.Color.white);//创建图表

// Write the chart image to the temporary directory

ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());//该工具类上面没有介绍,在鼠标移动到图片时显示提示信息是用Map实现的,这些Map是用该类生成的。

filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, info, session);//保存图表为文件

// Write the image map to the PrintWriter

ChartUtilities.writeImageMap(pw, filename, info);//生成Map信息。这些信息写在pw的输出流中,这里的输出流就是Response.out。也就是直接输出到页面了

pw.flush();

} catch (NoDataException e) {

System.out.println(e.toString());

filename = "public_nodata_500x300.png";

} catch (Exception e) {

System.out.println("Exception - " + e.toString());

e.printStackTrace(System.out);

filename = "public_error_500x300.png";

}

return filename;

}

二.图表显示:

<%

......

String filename = WebHitChart.generateBarChart(dDate, session, new PrintWriter(out));//获得图片的文件名。注意该语句写在jsp文件(bar_chart.jsp)的开头,而用out的封装类作为参数,访问该页面后可以看到生成Map热点的内容输出再该页面的开头部分。也就是说最好是把这几句话写在页面有输出之前。

String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename;//显示图片的Servlet全路径名,另外文件名作为该Servlet的参数

......

%>

......

<img src="<%= graphURL %>" width=500 height=300 border=0 usemap="#<%= filename %>">

src指定了servlet的全路径名,usermap指定了使用的热点。

该Servlet必须在WEB-INF/web.xml文件中配置:

<servlet>

<servlet-name>DisplayChart</servlet-name>

<servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>DisplayChart</servlet-name>

<url-pattern>/servlet/DisplayChart</url-pattern>

</servlet-mapping>

该Servlet的作用就是将图片文件的二进制流数据写道response的输出流中,在客户端也就显示成了图片。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有