用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

相关文章

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

JSON Web Token在登陆中的使用过程

《JSONWebToken在登陆中的使用过程》:本文主要介绍JSONWebToken在登陆中的使用过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录JWT 介绍微服务架构中的 JWT 使用结合微服务网关的 JWT 验证1. 用户登录,生成 JWT2. 自定义过滤

一文教你如何将maven项目转成web项目

《一文教你如何将maven项目转成web项目》在软件开发过程中,有时我们需要将一个普通的Maven项目转换为Web项目,以便能够部署到Web容器中运行,本文将详细介绍如何通过简单的步骤完成这一转换过程... 目录准备工作步骤一:修改​​pom.XML​​1.1 添加​​packaging​​标签1.2 添加

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark