用cewolf+jFreeChart 开发WEB 图形报表[转载]

原文 http://www.blogjava.net/baoyaer/archive/2007/04/29/111947.html

作者:ronghao100
在使用cewolf 之前,首先来熟悉一下jFreeChart 。这里分三部分来介绍 jFreeChart 。第一部分介绍jFreeChart产生
图形的流程及相关的重要的类;第二部分介绍四种常用的报表图(饼图、柱状图、折线图、时间序列图);第三部分
介绍在图形中增加Item Lable 。 
jFreeChart 的版本是jfreechart-1.0.0-pre2(1)
cewolf 的最新版本是cewolf-0.12.0

一、jFreeChart产生图形的流程
  1. 创建一个数据源(dataset)来包含将要在图形中显示的数据?
  2. 创建一个 JFreeChart 对象来代表要显示的图形
  3. 把图形输出
   重要的类和接口:
   org.jfree.data.general.Dataset  所有数据源类都要实现的接口
   org.jfree.chart.ChartFactory    由它来产生 JFreeChart 对象
   org.jfree.chart.JFreeChart    所有对图形的调整都是通过它噢!!
   org.jfree.chart.plot.Plot    通过JFreeChart 对象获得它,然后再通过它对图形外部部分(例:坐标轴)调整
                                注意:它有很多子类,一般都下嗍造型到它的子类!
   org.jfree.chart.renderer.AbstractRenderer     通过JFreeChart 对象获得它,然后再通过它对图形内部部分
                                                (例:折线的类型)调整。同样,针对不同类型的报表图,它有
                                                着不同的子类实现!在下面我们简称它为 Renderer
   下面我们结合不同类型的图形来具体分析这个流程。
   
二、饼图
   饼图的dataset 一般是用PieDataset 接口,具体实现类是 DefaultPieDataset
   1、创建一个数据源(dataset):
    

private   static  PieDataset createDataset()
    
{
        DefaultPieDataset defaultpiedataset 
= new DefaultPieDataset(); //注意是DefaultPieDataset!!
        defaultpiedataset.setValue("One"new Double(43.200000000000003D));
        defaultpiedataset.setValue(
"Two"new Double(10D));
        defaultpiedataset.setValue(
"Three"new Double(27.5D));
        defaultpiedataset.setValue(
"Four"new Double(17.5D));
        
return defaultpiedataset;
    }
 
   
  2、由ChartFactory  产生 JFreeChart 对象

  private   static  JFreeChart createChart(PieDataset piedataset)
    
{
        JFreeChart jfreechart 
= ChartFactory.createPieChart("Pie Chart Demo 1",  //图形标题名称
                                                              piedataset,   // dataset
                                                              true,      // legend?
                                                              true,     // tooltips?
                                                              false);  //URLs?
        PiePlot pieplot = (PiePlot)jfreechart.getPlot();  //通过JFreeChart 对象获得 plot:PiePlot!!
        pieplot.setNoDataMessage("No data available");    // 没有数据的时候显示的内容
        return jfreechart;
    }
 
   
    一些重要的方法:
     pieplot.setExplodePercent(0,0.3D) //把Lable 为"One" 的那一块”挖“出来30%    
   3、输出略  
   
三、柱状图
   柱状图的dataset 一般是用CatagoryDataset接口(具体实现类是DefaultCategoryDataset),也会用 IntervalXYDataset 
   接口
   1、创建一个数据源(dataset):
  private   static  CategoryDataset createDataset()
    
{
        String series1 
= "First";
        String series2 
= "Second";
        String series3 
= "Third";
        String category1 
= "Category 1";
        String category2 
= "Category 2";
        String category3 
= "Category 3";
        String category4 
= "Category 4";
        String category5 
= "Category 5";
        DefaultCategoryDataset defaultcategorydataset 
= new DefaultCategoryDataset();
        defaultcategorydataset.addValue(
1.0D, series1, category1);
        defaultcategorydataset.addValue(4D, series1, category2);
        defaultcategorydataset.addValue(3D, series1, category3);
        defaultcategorydataset.addValue(5D, series1, category4);
        defaultcategorydataset.addValue(5D, series1, category5);
        
        defaultcategorydataset.addValue(5D, series2, category1);
        defaultcategorydataset.addValue(7D, series2, category2);
        defaultcategorydataset.addValue(6D, series2, category3);
        defaultcategorydataset.addValue(8D, series2, category4);
        defaultcategorydataset.addValue(4D, series2, category5);
        
        defaultcategorydataset.addValue(4D, series3, category1);
        defaultcategorydataset.addValue(3D, series3, category2);
        defaultcategorydataset.addValue(2D, series3, category3);
        defaultcategorydataset.addValue(3D, series3, category4);
        defaultcategorydataset.addValue(6D, series3, category5);
        
return defaultcategorydataset;
    }


      2、由ChartFactory  产生 JFreeChart 对象    
  
   private   static  JFreeChart createChart(CategoryDataset categorydataset)
    
{
        JFreeChart jfreechart 
= ChartFactory.createBarChart("Bar Chart Demo"//图形标题名称
                                                            "Category",//domain 轴 Lable 
                                                                         这里先简单理解为横坐标Lable好了
                                                            
"Value"//range 轴 Lable
                                                                       这里也先简单理解为纵坐标Lable好了
                                                            categorydataset, 
//  dataset
                                                            PlotOrientation.VERTICAL, //垂直显示
                                                            true// legend?
                                                            true,  // tooltips?
                                                            false); //URLs?
        jfreechart.setBackgroundPaint(Color.white);   //设定背景色为白色
        CategoryPlot categoryplot = jfreechart.getCategoryPlot(); //获得 plot:CategoryPlot!!
        categoryplot.setBackgroundPaint(Color.lightGray); //设定图表数据显示部分背景色
        categoryplot.setDomainGridlinePaint(Color.white); //横坐标网格线白色
        categoryplot.setDomainGridlinesVisible(true); //可见
        categoryplot.setRangeGridlinePaint(Color.white); //纵坐标网格线白色
        
//下面两行使纵坐标的最小单位格为整数
        NumberAxis numberaxis = (NumberAxis)categoryplot.getRangeAxis();
        numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
        BarRenderer barrenderer 
= (BarRenderer)categoryplot.getRenderer(); //获得renderer 注意这里是下嗍造型
                                                                             到BarRenderer!!
        barrenderer.setDrawBarOutline(
false); // Bar的外轮廓线不画
        GradientPaint gradientpaint = new GradientPaint(0.0F0.0F, Color.blue, 
        
0.0F0.0Fnew Color(0064));   //设定特定颜色
        GradientPaint gradientpaint1 = new GradientPaint(0.0F0.0F, Color.green, 
        
0.0F0.0Fnew Color(0640));
        GradientPaint gradientpaint2 
= new GradientPaint(0.0F0.0F, Color.red,
        
0.0F0.0Fnew Color(6400));
        barrenderer.setSeriesPaint(
0, gradientpaint); //给series1 Bar设定上面定义的颜色
        barrenderer.setSeriesPaint(1, gradientpaint1); //给series2 Bar 设定上面定义的颜色
        barrenderer.setSeriesPaint(2, gradientpaint2); //给series3 Bar 设定上面定义的颜色
        CategoryAxis categoryaxis = categoryplot.getDomainAxis();  //横轴上的 Lable 45度倾斜
        categoryaxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);        
        
return jfreechart;
    }
  
    一些重要的方法:(增加一块标记)
        IntervalMarker intervalmarker = new IntervalMarker(4.5D, 7.5D);
        intervalmarker.setLabel("Target Range");
        intervalmarker.setLabelFont(new Font("SansSerif", 2, 11));
        intervalmarker.setLabelAnchor(RectangleAnchor.LEFT);
        intervalmarker.setLabelTextAnchor(TextAnchor.CENTER_LEFT);
        intervalmarker.setPaint(new Color(222, 222, 255, 128));
        categoryplot.addRangeMarker(intervalmarker, Layer.BACKGROUND);    
        
四、折线图
   折线图的dataset 两种CatagoryDataset接口(具体实现类是DefaultCategoryDataset),XYDataset 接口 
   1、CatagoryDataset接口:         
   A、创建一个数据源(dataset): 
    
private   static  CategoryDataset createDataset()
    
{
        String series1 
= "First";
        String series2 
= "Second";
        String series3 
= "Third";
        String type1 
= "Type 1";
        String type2 
= "Type 2";
        String type3 
= "Type 3";
        String type4 
= "Type 4";
        String type5 
= "Type 5";
        String type6 
= "Type 6";
        String type7 
= "Type 7";
        String type8 
= "Type 8";
        DefaultCategoryDataset defaultcategorydataset 
= new DefaultCategoryDataset();
        defaultcategorydataset.addValue(
1.0D, series1, type1);
        defaultcategorydataset.addValue(4D, series1, type2);
        defaultcategorydataset.addValue(3D, series1, type3);
        defaultcategorydataset.addValue(5D, series1, type4);
        defaultcategorydataset.addValue(5D, series1, type5);
        defaultcategorydataset.addValue(7D, series1, type6);
        defaultcategorydataset.addValue(7D, series1, type7);
        defaultcategorydataset.addValue(8D, series1, type8);
        
        defaultcategorydataset.addValue(5D, series2, type1);
        defaultcategorydataset.addValue(7D, series2, type2);
        defaultcategorydataset.addValue(6D, series2, type3);
        defaultcategorydataset.addValue(8D, series2, type4);
        defaultcategorydataset.addValue(4D, series2, type5);
        defaultcategorydataset.addValue(4D, series2, type6);
        defaultcategorydataset.addValue(2D, series2, type7);
        defaultcategorydataset.addValue(
1.0D, series2, type8);
        
        defaultcategorydataset.addValue(4D, series3, type1);
        defaultcategorydataset.addValue(3D, series3, type2);
        defaultcategorydataset.addValue(2D, series3, type3);
        defaultcategorydataset.addValue(3D, series3, type4);
        defaultcategorydataset.addValue(6D, series3, type5);
        defaultcategorydataset.addValue(3D, series3, type6);
        defaultcategorydataset.addValue(4D, series3, type7);
        defaultcategorydataset.addValue(3D, series3, type8);
        
return defaultcategorydataset;
    }
 
   B、由ChartFactory  产生 JFreeChart 对象     (与上面重复的部分就不再注释)
    
private   static  JFreeChart createChart(CategoryDataset categorydataset)
    
{
        JFreeChart jfreechart 
= ChartFactory.createLineChart("Line Chart Demo 1"
                                                             
"Type"
                                                             
"Value"
                                                             categorydataset, 
                                                             PlotOrientation.VERTICAL, 
                                                             
true
                                                             
true
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值