您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > JFreeChart综合应用
JFreeChart综合应用JFreeChart是一个开源的JAVA项目,它主要用来开发各种各样的图表,这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。在这些不同式样的图表上可以满足目前商业系统的要求。JFreeChart是一种基于JAVA语言的图表开发技术。JFreeChart可用于Servlet、JSP、Applet、JavaAppication环境中,通过JDBC可动态显示任何数据库数据,结合Itext可以输出至PDF文件。JFreeChart主要是由三个类构成:A)org.jfree.chart.servlet.ChartDeleter继承自HttpSessionBindingListener,用于实现当Session关闭时,删除临时目中的图象文件。B)org.jfree.chart.servlet.DisplayChart继承自Httpservlet用于处理显示图象。C)org.jfree.chart.servlet.ServletUtilities有一系列方法,例如,saveChartAs*;saveChartAs*是把图表按照不同的形式存储为图象;sendTempFile方法被重载了很多次,用于把文件流发送response。下面以柱状图和饼图为例,介绍图形创建方法。1柱状图org.jfree.chart.ChartFactory这个工厂类有createBarChart、createStackedBarChart、createBarChart3D、createStackedBarChart3D,这几个工厂方法创建不同类型的柱状图,比较重要的是PlotOrientation.VERTICAL让平行柱垂直显示,而PlotOrientation.HORIZONTAL则让平行柱水平显示。对柱状图影响较大的几个类包括:org.jfree.chart.axis.CategoryAxis、org.jfree.chart.axis.ValueAxis、org.jfree.chart.renderer.BarRenderer、org.jfree.chart.renderer.BarRenderer3D。具体实现步骤:1)创建用于图形生成所要的数据集对象。CategoryDatasetdataset=DatasetUtilities.createCategoryDataset(rowKeys,columnKeys,data);其中:rowKeys表示X轴数据,columnKeys表示Y轴数据,data表示填充柱状图所要的实际数据(来自于数据库)。2)创建图形对象。JFreeChartchart=ChartFactory.createBarChart3D(标题,null,null,dataset,PlotOrientation.VERTICAL,,true,false,false);createBarChart3D方法是ChartFactory工厂类里的一个方法,用于3D柱状图的生成,该类继承自JFreeChart。其中的八个参数分别代表:图形的标题、X轴标题、Y轴标题、dataset就是CategoryDataset类的实例对象、显示标题、启用热键、启用超键接。3)设置图形显示的属性。a)ValueAxis类,设置柱到图上下边的距离。实现方法是:ValueAxisrangeAxis=plot.getRangeAxis();设置最高的一个柱与图片顶端的距离:rangeAxis.setUpperMargin(0.15)设置最低的一个柱与图片底端的距离:rangeAxis.setLowerMargin(0.15)b)org.jfree.chart.renderer.BarRenderer3D类,设置图形上显示的数值。实现方法如下:BarRenderer3Drenderer=newBarRenderer3D();renderer.setBaseOutlinePaint(Color.BLACK);设置Wall的颜色:renderer.setWallPaint(Color.gray);设置每个柱的颜色:renderer.setSeriesPaint(0,newColor(0,0,255));renderer.setSeriesPaint(1,newColor(0,100,255));renderer.setSeriesPaint(2,Color.GREEN);设置每个柱的Outline颜色renderer.setSeriesOutlinePaint(0,Color.BLACK);renderer.setSeriesOutlinePaint(1,Color.BLACK);renderer.setSeriesOutlinePaint(2,Color.BLACK);设置每个地区所包含的平行柱之间的距离renderer.setItemMargin(0.1);显示每个柱的数值,并修改该数值的字体属性renderer.setItemLabelGenerator(newStandardCategoryItemLabelGenerator());renderer.setItemLabelFont(newFont(黑体,Font.PLAIN,12));renderer.setItemLabelsVisible(true);为图形加入超连接renderer.setItemURLGenerator(newStandardCategoryURLGenerator());renderer.setToolTipGenerator(newStandardCategoryToolTipGenerator());2饼图org.jfree.chart.plot包,包含创建饼形图的所有方法和属性。笔者根据业务需求创建了setURLGenerator(PieURLGeneratorgenerator)方法,在图片上建立连接,就是图片不同部分连接不同的资源。setSectionLabelType(inttype)方法:指定section标签的类型,共有7种类型。如果不指定,默认是NAME_LABELS,其中类型分别是:PiePlot.NO_LABELSPiePlot.NAME_LABELSPiePlot.VALUE_LABELSPiePlot.PERCENT_LABELS、PiePlot.NAME_AND_VALUE_LABELS、PiePlot.NAME_AND_PERCENT_LABELS、PiePlot.VALUE_AND_PERCENT_LABELS。setDefaultOutlinePaint(java.awt.Paintpaint)方法,指定section轮廓线的颜色,如果不指定,默认值为NULL。setDefaultOutlineStroke(java.awt.Strokestroke)方法,指定section轮廓线的厚度。setRadius(doublepercent)和setExplodePercent(intsection,doublepercent)方法,抽离section,就是把某一section从饼形图剥离出来,需要两个方法一起使用。setStartAngle(doubleangle)方法,设置第一个section开始位置,默认从12点钟方向开始。setPaint(intsection,java.awt.Paintpaint)方法指定section的颜色。setDirection(intdirection)方法指定section顺序,默认是顺时针方向。顺时针:PiePlot.CLOCKWISE;逆时针:PiePlot.ANTICLOCKWISE。具体实现步骤:1)创建用于图形生成所要的数据集对象。首先实例化类DefaultPieDatasetdataset=newDefaultPieDataset()。然后利用DefaultPieDataset类提供的setValue(value1,value2)方法,把从数据库里提取的数据存入DefaultPieDataset对象。其中value1是数据名称、value2是数据值。2)创建图形对象。首先实例化JFreeChartchart=ChartFactory.createPieChart3D(title,dataset,true,true,false)createPieChart3D方法是用于饼图生成的主要方法。其中title代表图形的标题、dataset就是DefaultPieDataset对象的实例。3)设置图形显示的属性。Stringfilename=ServletUtilities.saveChartAsPNG(jFreeChart,700,450,info,session);ChartUtilities.writeImageMap(pw,filename,info);pw.flush()saveChartAsPNG方法在ServletUtilities工厂类定义完成。主要用于把图形对象JFreeChart以图片的形式保存。其中的jFreeChart就是JFreeChart对象的实例。该方法返回一个文件名。writeImageMap(pw,filename,info)方法用于把保存的图片文件以字节流的形式写入用户界面。其中pw是java.io包的PrintWriter类的实例对象,该对象创建一个图形输出流。Filename是输出图片的文件名。该文件名来自ServletUtilities.saveChartAsPNG方法创建。参数info用于图形信息的显示。用ChartRenderingInfoinfo=newChartRenderingInfo(newStandardEntityCollection())创建。最后输出完成图形,调用pw.flush()方法关闭IO流。------------------------------------------------------------------------------------------使用JFreeChart生成各种样式的图表限于篇幅的问题我们在这里只实现两种常用的图表,其他类型图表读者可以触类旁通。我们先给出柱状图的实现,饼图的实现再来跟柱状图进行比较。1柱状图packagelius.chart.demo;importjava.io.*;importorg.jfree.data.*;importorg.jfree.chart.*;importorg.jfree.chart.plot.*;/***该类用于演示最简单的柱状图生成*@authorWinterLau*/publicclassBarChartDemo{publicstaticvoidmain(String[]args)throwsIOException{CategoryDatasetdataset=getDataSet2();JFreeChartchart=ChartFactory.createBarChart3D(水果产量图,//图表标题水果,//目录轴的显示标签产量,//数值轴的显示标签dataset,//数据集PlotOrientation.VERTICAL,//图表方向:水平、垂直true,//是否显示图例(对于简单的柱状图必须是false)false,//是否生成工具false//是否生成URL链接);FileOutputStreamfos_jpg=null;try{fos_jpg=newFileOutputStream(D:\\fruit.jpg);ChartUtilities.writeChartAsJPEG(fos_jpg,100,chart,400,300,null);}finally{try{fos_jpg.close();}catch(Exceptione){}}}/***获取一个演示用的简单
本文标题:JFreeChart综合应用
链接地址:https://www.777doc.com/doc-3770600 .html