JfreeChart组件实现图形报表

JfreeChart组件

  1. JfreeChart组件的作用。
    答:JFreeChart是Java中开源的制图组件,主要用于生成各种动态图表,在JAVA的图形报表技术中,JFreeChart组件提供了方便,快捷,灵活的制图方法。JFreeChart为Java的图形报表技术提供了解决方案。在Java项目的应用中,JFreeChart组件几乎可以满足目前图形报表的所有需求。 JFreeChart组件可以生成各种各样的图形报表,如常用的柱形图,区域图,饼形图,折线图,时序图,甘特图等。

  2. 使用JfreeChart组件开发前需要做的准备:
    (1) jar包:
    jfreechart-1.0.13.jar、
    gnujaxp.jar、
    jcommon-1.0.16.jar
    (2) 在web.xml文件中增加如下配置:

    DisplayChart
    org.jfree.chart.servlet.DisplayChart


    DisplayChart
    /chart

  3. JFreeChart使用分为三个步骤:
    (1) 创建数据集:创建用来构成JFreeChart图表的数据,JFreeChart图表显示的数据都来源于数据集。
    (2) 创建JFreeChart对象:JFreeChart类只是一个制图对象,它代表一种制图类型,在制图过程中,只有在创建制图对象JFreeChart后,才可以生成实际的图片。
    (3) 获取图片:1.调用ServletUtilities类的saveChartAsJPEG()方法来实现,它返回一个JPEG格式的图片名称。2.通过此方法生成图片后,调用已注册的JFreeChart提供的Servlet类DisplayChart,即可获取图片的相对路径。
    注**:
    // 保存图片 返回图片文件名
    String fileName = ServletUtilities.saveChartAsJPEG(chart, 700, 400, null, request.getSession());
    // 获取图片路径(内存中) 需要在web.xml中配置一下
    String chartURL=request.getContextPath() + “/chart?filename=”+fileName;

  4. JfreeChart组件的核心对象
    *制图对象
    JFreeChart类是一个制图对象,它代表着一种制图类型。如:创建一个柱形图,首先需要创建一个柱形图的制图对象JFreeChart;创建一个饼形图,需要创建个饼形图的制图对象JFreeChart,在制图过程中,只有在创建制图对象JFreeChart后,才可以生成实际的图片。
    在JFreeChart类中,可以设置所生成图片的边界、字体、背景、透明度等属性。
    方法 说明
    public void setAntiAlias(boolean flag) 设置字体模糊边界
    public void setBackgroudImage(Image image) 设置背景图片
    public void setBackgroundImageAlignment(int alignment) 设置背景图片对齐方式,其参数常量定义在org.jfree.ui.Align类中
    public void setBackgroundImageAlpha(float alpha) 设置背景图片透明度
    public void setBackgroundPaint(Paint paint) 设置背景颜色
    public void setBorderPaint(Paint paint) 设置边界线条颜色
    public void setBorderVisible(boolean visible) 设置边界线条是否可见

    ***制图工厂对象
    在生成图形报表时,制图对象JFreeChart是必不可少的对象,它可以直接通过new关键字进行实例化,也可以通过制图工厂ChartFactory类进行实例化。当使用new关键字进行实例化时,需要设置大量的属性信息,因为JFreeChart组件提供图表的种类很多,对于每一种图表都进行特殊的设置,非常繁琐。所以在使用过程中,一般都使用制图工厂ChartFacroty类进行创建。
    制图工厂ChartFactory是一个抽象类,它不能被实例化,但此类之中提供创建各种制图对象的方法,如创建柱形图对象、区域图对象、饼形图对象、折线图对象等方法,这些方法都是静态的方法,可直接创建JFreeChart对象,并且是属于某一种具体的图表类型的JFreeChart对象,其使用非常方便,它的常用方法及说明如表1所示。

图表类型 方法 说明

柱形图 public static JFreeChart createBarChart() 创建一个常规的柱形图对象
public static JFreeChart createBarChart3D() 创建一个3D效果的柱形图对象

饼形图 public static JFreeChart createPieChart() 创建一个常规的饼形图对象
public static JFreeChart createPieChart3D() 创建一个3D 效果的饼形图对象
区域图 public static JFreeChart createAreaChart() 创建一个常规的区域图对象

折线图 public static JFreeChart createLineChart() 创建一个常规的折线图对象
public static JFreeChart createLineChart3D() 创建一个3D 效果的折线图对象

时序图 public static JFeeChart createTimeSeriesChart() 创建一个常规的时序图对象

除所列的方法外,ChartFactory类还有很多创建各种类型制图对象的方法,在此不一一进行罗列。在ChartFacroty类中,对于同种类型的制图对象提供一个或多个方法,如表20.1中的所示的常规制图对象与3D效果的制图对象的方法。可见,制图工厂ChartFactory类为创建制图对象提供了多个灵活的方法。
ChartFactory类可以理解为是一个生产制图对象JFreeChart的工厂,当需要用到某一种类型的制图对象时,通过此工厂进行获取。
例如:
chart = ChartFactory.createBarChart3D(“客户贡献分析表”, “客户”, “总金额”, dataset,
PlotOrientation.VERTICAL, // 图表的方向
true, // 是否显示图例
true, // 是否显示工具提示
true); // 是否产生url链接
// 创建出dataset对象
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
//Y轴和X轴
dataset.addValue(sum, “客户贡献”, cust_name);
JFreeChart chart=ChartFactory.createPieChart3D(
“饼形图”, //图表的标题
initPieData() , //饼形图的数据集对象
true , //是否显示图列
true , //是否显示提示文
false); //是否生成超链接

***数据集合对象
在JFreeChart组件的图形报表技术应用中,绘制一个图表需要一定的数据,JFreeChart组件通过提供的数据进行计算并绘制出图表信息。由于在数据的分析计算中并不是单一的数值,所以绘制图表要为JFreeChart组件提供数据集合。
数据集合对象是用于装载绘制图表所需要的数据集。在JFreeChart组件中,针对不同图表类型提供了不同的数据集合对象,它们所具有的作用也是不同的。
本节内容将以常用的数据集合对象为例,来讲解JFreeChart中的数据集合对象,在学习JFreeChart数据集合对象前,先来了解一下常用数据集合对象之间的关系Dataset接口是数据集合的核心对象,所有数据集合对象都直接或间接的实现了此接口。类名以Abstract开头的类均为抽象,它们并不能实例化,但为其子类提供公共属性与方法,其中DefaultCategoryDataset类、DefaultPieDataset类、XYSeriesCollection类与TimeSeriesCollection类为经常用到的数据集合对象。
数据集合对象 说明
DefaultCategoryDataset类 默认的类别数据集合对象,可用于创建柱形图、区域图数据集合等
DefaultPieDataset类 默认的饼形图数据集合对象,可用于创建饼形图数据集合
XYSeriesCollection类 描述坐标轴序列类型的数据集合,可用于创建折线图等数据集合
TimeSeriesCollection类 描述时间序列的数据集合,可用于创建时序图等数据集合

例如:
DefaultCategoryDataset dataset=new DefaultCategoryDataset(); //创建数据集合
dataSet.addValue(100,“长春”,“土豆”); //向数据集合中添加数据
上述代码创建一个DefaultCategoryDataset类型的数据集合,并调用addValue()方法向数据集合中添加一个数据。

****绘图区对象
通过数据集合所生成数据图表,可以通过绘图区对象进行属性设置,例如背景色、透明度等样式。
绘图区对象是JFreeChart组件中的一个重要对象,它由Plot类定义,使用过程中可以通过此类进行设置绘图区属性及样式。
方法 说明
public void setBackgroundImage(Image image) 设置数据区的背景图片
public void setBackgroundImageAlignment(int alignment) 设置数据区的背景图片对齐方式(参数常量在org.jfree.ui.Align类中定义)
public void setBackgroundAlpha(float alpha) 设置数据区的背景透明度,范围在0.0~1.0间
public void setForegroundAlpha(float alpha) 设置数据区的前景透明度,范围在0.0~1.0间
public void setDataAreaRatio(double ratio) 设置数据区占整个图表区的百分比
public void setOutLinePaint(Paint paint) 设置数据区的边界线条颜色
public void setNoDataMessage(String message) 设置没有数据时显示的消息

  1. PiePlot类
    JFreeChart所能生成的图形报表是多种多样的,仅仅一个Plot类并不能满足绘图区样式的设置,在对不同类型图形的设置中,可以通过Plot的子类进行实现PiePlot类是Plot类的子类,主要用于描述PieDataset数据集合类型的图表,通常使用此类来绘制一个饼形图。
    方法 说明
    public void setDataset(PieDataset dataset) 设置绘制图表所需要的数据集合
    public void setDataset(PieDataset dataset) 设置绘制图表所需要的数据集合
    public void setCircular(boolean flag) 设置饼形图是否一定是正圆
    public void setStartAngle(double angle) 设置饼形图的初始角度
    public void setDirection(Rotation direction) 设置饼形图的旋转方向
    public void setExplodePercent(int section,double percent) 设置抽取图表的部分及距离
    public void setLabelFont(Font font) 设置分类标签字体(3D效果下无效)
    public void setLabelPaint(Paint paint) 设置分类标签字体颜色(3D效果下无效)

  2. CategoryPlot 类
    CategoryPlot类主要用于描述CategoryDataset数据集合类型的图表,是Plot类的子类,它支持折线图、区域图等。
    方法 说明
    public void setDataset(PieDataset dataset) 设置绘制图表所需要的数据集合
    public void setColumnRenderingOrder(SortOrder order) 设置数据分类的排序方式
    public void setAxisOffset(Spacer offset) 设置坐标轴到数据区的间距
    public void setOrientation(PlotOrientation orientation) 设置数据区的方向(横向或纵向)
    public void setDomainAxis(CategoryAxis axis) 设置数据区的分类轴
    public void setRangeAxis(ValueAxis axis) 设置数据区的数据轴
    public void addAnnotation(CategoryAnnotation annotation) 设置数据区的注释

  3. XYPlot 类
    XYPlot类是Plot类的子类,主要用于描述XYDataset数据集合类型的图表,此类可以具有0或多个数据集合,并且每一个数据集合可以与一个渲染对象相关联。
    方法 说明
    public ValueAxis getDomainAxis 返回X轴
    public ValueAxis getRangeAxis() 返回Y轴
    public void setDomainAxis(ValueAxis axis) 设置X轴
    public void setRangeAxis(ValueAxis axis) 设置Y轴

坐标轴对象
在JFreeChart组件中,涉及到坐标轴类型的图表,其样式与属性由坐标轴对象Axis类进行控制,此类是坐标轴对象的父类。
方法 说明
public void setVisible(boolean flag) 设置坐标轴是否可见
public void setAxisLinePaint(Paint paint) 设置坐标轴线条颜色,此设置在3D效果下无效
public void setAxisLineVisible(boolean visible) 设置坐标轴线条是否可见
public void setLabel(String label) 设置坐标轴标题
public void setLabelFont(Font font) 设置坐标轴标题字体
public void setLabelPaint(Paint paint) 设置坐标轴标题颜色
public void setLabelAngle(double angle) 设置坐标轴标题旋转角度
JFreeChart组件针对不同类型的图表对象,提供了不同类型的坐标轴对象,由Axis类的子类进行扩展,其常用子类的类图如图1所示。

  1. CategoryAxis 类
    CategoryAxis类是Axis类的子类,主要用于对分类轴的相关属性进行设置。
    方法 说明
    public void setCategoryMargin(double margin) 设置分类轴边距
    public void setLowerMargin(double margin) 设置分类轴下边距或左边距
    public void setUpperMargin(double margin) 设置分类轴上边距或右边距
    public void setVerticalCategoryLabels(boolean flag) 设置分类轴标题是否旋转到垂直
    public void setMaxCategoryLabelWidthRatio(float ratio) 设置分类轴分类标签的最大宽度

  2. ValueAxis 类
    ValueAxis类是Axis类的子类,主要用于对数据轴的相关属性进行设置,它还是NumberAxis类与DateAxis类的父类,其常用方法及说明如表3所示。
    方法 说明
    public void setAutoRange(boolean auto) 设置数据轴数据范围是否为自动
    public void setFixedAutoRange(double length) 设置数据轴固定数据范围
    public void setInverted(boolean flag) 设置数据轴是否反向
    public void setLowerMargin(double margin) 设置分类轴下边距或左边距
    public void setUpperMargin(double margin) 设置分类轴上边距或右边距
    public void setLowerBound(double min) 设置数据轴上的显示最小值
    public void setUpperBound(double max) 设置数据轴上的显示最大值

  3. NumberAxis 类
    NumberAxis类主要用于对数值类型数据轴的相关属性进行设置,是ValueAxis类的子类
    方法 说明
    public void setAutoRangeIncludesZero(boolean flag) 设置是否强制在自动选择的数据范围中包含0
    public void setAutoRangeStickyZero(boolean flag) 设置是否强制在整个数据轴中包含0,即使0不在数据范围中
    public void setNumberFormatOverride(NumberFormat formatter) 设置数据轴数据标签的显示格式

  4. DateAxis 类
    DateAxis类主要用于对日期轴的相关属性进行设置,是ValueAxis类的子类
    方法 说明
    public void setMaximumDate(Date maximumDate) 设置日期轴上的最小日期
    Public void setMinimumDate(Date minimumDate) 设置日期轴上的最大日期
    public void setDateFormatOverride(DateFormat formatter) 设置日期轴日期标签的显示格式
    public void setTickUnit(DateTickUnit unit) 设置日期轴的日期标签

***图片渲染对象
图片渲染对象用于渲染和显示图表,它在图表的显示效果方面起着很大的作用。在JFreeChart组件中,渲染对象定义为AbstractRenderer类,此类是所有渲染对象的父类,但它是一个抽象类。

  1. Axis 类
    在图片渲染对象中,JFreeChart组件同样对AbstractRenderer类进行了扩展,在使用过程中可根据实际需要,选择合适的AbstractRenderer类的子类对象。

注**:
// 保存图片 返回图片文件名
String fileName = ServletUtilities.saveChartAsJPEG(chart, 700, 400, null, request.getSession());
// 获取图片路径(内存中) 需要在web.xml中配置一下
String chartURL=request.getContextPath() + “/chart?filename=”+fileName;

你可能感兴趣的:(JfreeChart组件实现图形报表)