精通JFreeChart统计图表的实现(一)

在图表统计功能中,利用开源项目JFreeChart在开发Web项目方面的简单易用的优势来实现的。下面是对JFreeChart的概念和实现机制的分析。最后给出一个图表统计应用实例。

1JFreeChart的概念

JFreeChart是一个免费的Java Chart Library,并且它能够被用在应用程序,AppletsServletsJsp中。它是完全源代码公开的,但是如果用到商业中会受到这个许可证书的限制。它是一个开源的图形报表引擎中间件,主要用来各种各样的图表,这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。

JFreeChart的开发环境,因为是基于WEB浏览器的图表展现,因此需要一个Servlet引擎或者是J2EE应用服务器(例如WebSphereTomcat等)。以及WEB环境的搭建。在开发时必须的两个文件包是:JFreeChart以及Jcommon。目前最新配套版本是:JFreeChart 0.9.20  Jcommon 0.9.4

2、用JFreeChart创建WEB图表的基本知识和实现机制

(1) JFreeChart主要是由三个类构成:

org.jfree.chart.servlet.ChartDeleter  //删除临时目录中的图像

org.jfree.chart.servlet.DisplayChart  //显示图像

org.jfree.chart.servlet.ServletUtilities//处理图像

下面是对以上各个类的详细说明:

ChartDeleter 继承自HttpSessionBindingListener,用于实现当Session 关闭时,删除临时目录中的图像文件。

ServletUtilities有一系列方法:

saveChartAs*;saveChartAs*是把图表按照不同的形式存储为图像;

sendTempFile方法被重载了很多次,用于把文件流发送response;

DisplayChart继承自Httpservlet 用于处理显示图像;

(2)在你的应用中 web.xml文件必须配置DisplayChart;

配置形式如:

DisplayChart

org.jfree.chart.servlet.DisplayChart

DisplayChart

/servlet/DisplayChart

3创建交互式WEB图表的实现机制

       很多情况不仅仅要求可以在浏览器上显示一个图表,更需要用户可以直接在图表上做一下交互的操作,例如获取信息提示,点击图表某个部分进行更详细信息的展示等等。为此就要求该图形具有交互操作的功能。在HTML中需要一个图像具有可交互的功能就必须给该图像定义一个Map对象。要根据一个图像来生成对应的MAP对象,则需要在创建一个图表的时候有两个参数,这两个参数就是ChartFactory.createBarChart3D方法中的最后两个参数,这两个参数的类型都是布尔值。它们意思分别是:是否创建工具提示(tooltip)以及是否生成URL。分别对应着MAP中一个AREAtitle属性以及href属性。

JFreeChart中要实现MAP对象的功能,就需要生成一个MAP对象。但是它需要引入另外一个对象:ChartRenderingInfo。但是在JFreeChart没有直接的方法来利用一个图表对象直接生成MAP数据,它需要一个中间对象来过渡,这个对象就是ChartRenderingInfo

生成MAP数据的流程图如图1.1所示:

1. 1 MAP数据的流程图

如上图所示,ChartUtilities类是整个流程的核心,它周围的对象都是一些例如数据对象或者是文件等。这个流程简单描述如下:

首先创建一个ChartRenderingInfo对象并在调用ChartUtilitieswriteChartAsJPEG时作为最后一个参数传递进去。调用该方法结束后将产生一个图像文件以及一个填充好MAP数据的ChartRenderingInfo对象,有了这个对象还是没有办法获取具体的MAP数据,我们还必须借助于ChartUtilitieswriteImageMap方法来将ChartRenderingInfo对象读取出来。

获取MAP数据的代码片断如下:

              FileOutputStream fos_jpg = null;//定义一个文件输出流的对象fos_jpg

              FileOutputStream fos_cri = null; //定义一个文件输出流的对象fos_cri

              try{

                     //根据不同类型的图表使用不同的类,下面是对饼形图的操作

                     PiePlot plot = (PiePlot) chart.getPlot();//定义一个饼形图

                     plot.setURLGenerator(new StandardPieURLGenerator(url));

                     //设置URL属性

                 plot.setToolTipGenerator(new StandardPieToolTipGenerator());

//设置工具提示

                     fos_jpg = new FileOutputStream(“d://example.jpg”);

                     //实例化一个fos_jpg输出文件流的对象d://example.jpg

                     ChartUtilities.writeChartAsJPEG(fos_jpg,100,chart,400,300,info);

                     //保存fos_jpg文件

                     fos_cri = new FileOutputStream(“d:// example.map”);

                     //实例化一个fos_cri输出文件流的对象d://example.jpg

                     PrintWriter w = new PrintWriter(fos_cri);

                     //输出实例化的文件流对象

                     ChartUtilities.writeImageMap(w, mapname, info);

// 将图像的MAP写入PrintWriter对象w

                     w.flush();

           }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
JFreeChart是一个免费的Java图表库,可以用来创建各种类型的统计图表。其实现步骤如下: 1. 下载并导入JFreeChart库到你的Java项目中。 2. 创建一个数据集对象,用于存储统计数据。 3. 创建一个图表对象,指定图表的类型(如柱状图、折线图等)和数据集。 4. 添加必要的样式和标签到图表中,比如设置标题、轴标签等。 5. 将图表对象绘制到Swing组件上,比如JFrame或JPanel。 下面是一个简单的示例代码,用于创建一个柱状图: ``` // 创建数据集对象 DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.addValue(100, "Sales", "Jan"); dataset.addValue(200, "Sales", "Feb"); dataset.addValue(150, "Sales", "Mar"); // 创建柱状图对象 JFreeChart chart = ChartFactory.createBarChart( "Monthly Sales", // 图表标题 "Month", // 横轴标签 "Sales", // 纵轴标签 dataset, // 数据集 PlotOrientation.VERTICAL, // 图表方向 true, // 是否显示图例 true, // 是否生成工具提示 false // 是否生成URL链接 ); // 设置柱状图样式 CategoryPlot plot = chart.getCategoryPlot(); BarRenderer renderer = (BarRenderer) plot.getRenderer(); renderer.setSeriesPaint(0, Color.blue); // 将图表绘制到JFrame上 ChartPanel chartPanel = new ChartPanel(chart); JFrame frame = new JFrame("Sales Report"); frame.setContentPane(chartPanel); frame.pack(); frame.setVisible(true); ``` 这个示例创建了一个柱状图,用于显示每个月的销售额。你可以根据自己的需要修改数据集、图表类型和样式来创建不同类型的统计图表

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值