用cewolf+jFreeChart 开发WEB 图形报表 『一』

2024-02-21 20:38

本文主要是介绍用cewolf+jFreeChart 开发WEB 图形报表 『一』,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在使用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
                                                             
false);
        jfreechart.setBackgroundPaint(Color.white);
        CategoryPlot categoryplot 
= (CategoryPlot)jfreechart.getPlot();
        categoryplot.setBackgroundPaint(Color.lightGray);
        categoryplot.setRangeGridlinePaint(Color.white);
        NumberAxis numberaxis 
= (NumberAxis)categoryplot.getRangeAxis();
        numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
        numberaxis.setAutoRangeIncludesZero(
true);
        
//获得renderer 注意这里是下嗍造型到lineandshaperenderer!!
        LineAndShapeRenderer lineandshaperenderer = (LineAndShapeRenderer)categoryplot.getRenderer();
        lineandshaperenderer.setShapesVisible(
true); //series 点(即数据点)可见
        lineandshaperenderer.setSeriesStroke(0new BasicStroke(2.0F111.0Fnew float[] {
            10F, 6F
        }
0.0F)); //定义series为"First"的(即series1)点之间的连线 ,这里是虚线,默认是直线
        lineandshaperenderer.setSeriesStroke(1new BasicStroke(2.0F111.0Fnew float[] {
            6F, 6F
        }
0.0F)); //定义series为"Second"的(即series2)点之间的连线
        lineandshaperenderer.setSeriesStroke(2new BasicStroke(2.0F111.0Fnew float[] {
            
2.0F, 6F
        }
0.0F)); //定义series为"Third"的(即series3)点之间的连线
        return jfreechart;
    }
 
        

一些重要的方法:
       
 lineandshaperenderer.setLineVisible(true)  //series 点(即数据点)间有连线可见
   2、XYDataset 接口:
   A、创建一个数据源(dataset):
    

 

private   static  XYDataset createDataset()
    
{
        XYSeries xyseries 
= new XYSeries("First"); //先产生XYSeries 对象
        xyseries.add(1.0D1.0D);
        xyseries.add(2D, 4D);
        xyseries.add(3D, 3D);
        xyseries.add(4D, 5D);
        xyseries.add(5D, 5D);
        xyseries.add(6D, 7D);
        xyseries.add(7D, 7D);
        xyseries.add(8D, 8D);
        
        XYSeries xyseries1 
= new XYSeries("Second");
        xyseries1.add(
1.0D, 5D);
        xyseries1.add(2D, 7D);
        xyseries1.add(3D, 6D);
        xyseries1.add(4D, 8D);
        xyseries1.add(5D, 4D);
        xyseries1.add(6D, 4D);
        xyseries1.add(7D, 2D);
        xyseries1.add(8D, 
1.0D);
        
        XYSeries xyseries2 
= new XYSeries("Third");
        xyseries2.add(3D, 4D);
        xyseries2.add(4D, 3D);
        xyseries2.add(5D, 2D);
        xyseries2.add(6D, 3D);
        xyseries2.add(7D, 6D);
        xyseries2.add(8D, 3D);
        xyseries2.add(9D, 4D);
        xyseries2.add(10D, 3D);
        
        XYSeriesCollection xyseriescollection 
= new XYSeriesCollection(); //再用XYSeriesCollection添加入XYSeries 对象
        xyseriescollection.addSeries(xyseries);
        xyseriescollection.addSeries(xyseries1);
        xyseriescollection.addSeries(xyseries2);
        
return xyseriescollection;
    }

   

这篇关于用cewolf+jFreeChart 开发WEB 图形报表 『一』的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/733003

相关文章

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

SpringBoot通过main方法启动web项目实践

《SpringBoot通过main方法启动web项目实践》SpringBoot通过SpringApplication.run()启动Web项目,自动推断应用类型,加载初始化器与监听器,配置Spring... 目录1. 启动入口:SpringApplication.run()2. SpringApplicat

基于Java开发一个极简版敏感词检测工具

《基于Java开发一个极简版敏感词检测工具》这篇文章主要为大家详细介绍了如何基于Java开发一个极简版敏感词检测工具,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录你是否还在为敏感词检测头疼一、极简版Java敏感词检测工具的3大核心优势1.1 优势1:DFA算法驱动,效率提升10

Python开发简易网络服务器的示例详解(新手入门)

《Python开发简易网络服务器的示例详解(新手入门)》网络服务器是互联网基础设施的核心组件,它本质上是一个持续运行的程序,负责监听特定端口,本文将使用Python开发一个简单的网络服务器,感兴趣的小... 目录网络服务器基础概念python内置服务器模块1. HTTP服务器模块2. Socket服务器模块

Java 与 LibreOffice 集成开发指南(环境搭建及代码示例)

《Java与LibreOffice集成开发指南(环境搭建及代码示例)》本文介绍Java与LibreOffice的集成方法,涵盖环境配置、API调用、文档转换、UNO桥接及REST接口等技术,提供... 目录1. 引言2. 环境搭建2.1 安装 LibreOffice2.2 配置 Java 开发环境2.3 配

Python38个游戏开发库整理汇总

《Python38个游戏开发库整理汇总》文章介绍了多种Python游戏开发库,涵盖2D/3D游戏开发、多人游戏框架及视觉小说引擎,适合不同需求的开发者入门,强调跨平台支持与易用性,并鼓励读者交流反馈以... 目录PyGameCocos2dPySoyPyOgrepygletPanda3DBlenderFife

使用Python开发一个Ditto剪贴板数据导出工具

《使用Python开发一个Ditto剪贴板数据导出工具》在日常工作中,我们经常需要处理大量的剪贴板数据,下面将介绍如何使用Python的wxPython库开发一个图形化工具,实现从Ditto数据库中读... 目录前言运行结果项目需求分析技术选型核心功能实现1. Ditto数据库结构分析2. 数据库自动定位3

Django开发时如何避免频繁发送短信验证码(python图文代码)

《Django开发时如何避免频繁发送短信验证码(python图文代码)》Django开发时,为防止频繁发送验证码,后端需用Redis限制请求频率,结合管道技术提升效率,通过生产者消费者模式解耦业务逻辑... 目录避免频繁发送 验证码1. www.chinasem.cn避免频繁发送 验证码逻辑分析2. 避免频繁

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用