JFreeChart学习笔记(创建JSP输出)

2024-04-08 03:58

本文主要是介绍JFreeChart学习笔记(创建JSP输出),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

JFreeChart学习笔记

<script type="text/javascript"> </script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> </script> name="google_ads_frame" marginwidth="0" marginheight="0" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-8672584364535288&dt=1187577769421&lmt=1187577769&prev_fmts=160x90_0ads_al&format=336x280_as&output=html&correlator=1187577769390&url=http%3A%2F%2Fdoc.readmen.com%2F7%2F118300.shtml&color_bg=FFFFFF&color_text=000000&color_link=000000&color_url=000000&color_border=FFFFFF&ad_type=text_image&ref=http%3A%2F%2Fwww.baidu.com%2Fs%3Fwd%3Djfreechart%26cl%3D3&cc=72&ga_vid=1840802550.1187577769&ga_sid=1187577769&ga_hid=1645242538&flash=9&u_h=1024&u_w=1280&u_ah=994&u_aw=1280&u_cd=32&u_tz=480&u_java=true" frameborder="0" width="336" scrolling="no" height="280" allowtransparency="allowtransparency">
JFreeChart中几个核心的对象类:

JFreeChart

 
JFreeChart中几个核心的对象类:
类名
类的作用以及简单描述
JFreeChart
图表对象,任何类型的图表的最终表现形式都是在该对象进行一些属性的定制。JFreeChart引擎本身提供了一个工厂类用于创建不同类型的图表对象
XXXXXDataset
数据集对象,用于提供显示图表所用的数据。根据不同类型的图表对应着很多类型的数据集对象类。常用的数据集对象有:柱状图数据集对象DefaultCategoryDataset、饼图数据集对象DefauldPieDataset和曲线图数据集对象DefaultTableXYDataset
XXXXXPlot
图表区域对象,基本上这个对象决定着什么样式的图表,创建该对象的时候需要Axis、Renderer以及数据集对象的支持。常用的Plot对象有:柱状图CategoryPlot、饼图PiePlot和曲线图XYPlot。
XXXXXAxis
用于处理图表的两个轴:纵轴和横轴。常用的有NumberAxis数据轴,DateAxis日期轴。
XXXXXRenderer
负责如何显示一个图表对象。常用的Renderer有DefaultCategoryItemRenderer 柱状图显示器StandardXYItemRenderer曲线图显示器。饼图的Renderer
XXXXXURLGenerator
用于生成Web图表中每个项目的鼠标点击链接。常用的URLCenerator有StandardCategoryURLGenerator
StandardPieURLGenerator
StandardXYURLGenerator
XXXXXToolTipGenerator
用于生成图象的帮助提示,不同类型图表对应不同类型的工具提示类。常用的有:StandardXYToolTipGenerator
StandardCategoryToolTipGenerator
StandardPieItemLabelGenerator
 

一般的创建图表的过程为:

1.  从数据库里读取数据

2.  将数据保存到图表对应的数据集对象中

3.  创建坐标轴对象

4.  创建Renderer对象

5.  创建Plot对象

6.  创建JfreeChart对象

7.  生成图片文件(或者二进制流)

 

JfreeChart提供的Web应用的例子来说明一下以上几个步骤:

一.柱图。

public static String generateBarChart(Date hitDate, HttpSession session, PrintWriter pw) {

              String filename = null;

              try {

                     //  Retrieve list of WebHits

                     WebHitDataSet whDataSet = new WebHitDataSet();

                     ArrayList list = whDataSet.getDataBySection(hitDate);//获得数据集
 

                     //  Throw a custom NoDataException if there is no data

                     if (list.size() == 0) {

                            System.out.println("No data has been found");

                            throw new NoDataException();

                     }

 

                      //  Create and populate a CategoryDataset

                     Iterator iter = list.listIterator();

            DefaultCategoryDataset dataset = new DefaultCategoryDataset();

                     while (iter.hasNext()) {

                            WebHit wh = (WebHit)iter.next();

                dataset.addValue(new Long(wh.getHitCount()), "Hits", wh.getSection());

                     }//将数据集保存到 Dataset对象
 

                     //  Create the chart object

                     CategoryAxis categoryAxis = new CategoryAxis("");

                     ValueAxis valueAxis = new NumberAxis("");//创建坐标轴

                     BarRenderer renderer = new BarRenderer();//创建Renderer

                     renderer.setItemURLGenerator(new StandardCategoryURLGenerator("xy_chart.jsp","series","section"));//创建URLGenerator.再不需要连接的情况下将第一个参数设置成"###"就可以了

            renderer.setToolTipGenerator(new StandardCategoryToolTipGenerator());//创建提示标签

 

                     Plot plot = new CategoryPlot(dataset, categoryAxis, valueAxis, renderer);//创建图表区域对象

                     JFreeChart chart = new JFreeChart("", JFreeChart.DEFAULT_TITLE_FONT, plot, false);

                     chart.setBackgroundPaint(java.awt.Color.white);//创建图表

 

                     //  Write the chart image to the temporary directory

                     ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());//该工具类上面没有介绍,在鼠标移动到图片时显示提示信息是用Map实现的,这些Map是用该类生成的。

                     filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, info, session);//保存图表为文件

 

                     //  Write the image map to the PrintWriter

                     ChartUtilities.writeImageMap(pw, filename, info);//生成 Map信息。这些信息写在 pw的输出流中,这里的输出流就是 Response.out。也就是直接输出到页面了

                     pw.flush();

 

              } catch (NoDataException e) {

                     System.out.println(e.toString());

                     filename = "public_nodata_500x300.png";

              } catch (Exception e) {

                     System.out.println("Exception - " + e.toString());

                     e.printStackTrace(System.out);

                     filename = "public_error_500x300.png";

              }

              return filename;

       }

二.图表显示:

<%

       ......

       String filename = WebHitChart.generateBarChart(dDate, session, new PrintWriter(out));//获得图片的文件名。注意该语句写在jsp文件(bar_chart.jsp)的开头,而用out的封装类作为参数,访问该页面后可以看到生成Map热点的内容输出再该页面的开头部分。也就是说最好是把这几句话写在页面有输出之前。

    String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename;//显示图片的Servlet全路径名,另外文件名作为该Servlet的参数

       ......

%>

......

<img src="<%= graphURL %>" width=500 height=300 border=0 usemap="#<%= filename %>">

 

src指定了servlet的全路径名,usermap指定了使用的热点。

Servlet必须在WEB-INF/web.xml文件中配置:

<servlet>

    <servlet-name>DisplayChart</servlet-name>

    <servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>

  </servlet>

   <servlet-mapping>

        <servlet-name>DisplayChart</servlet-name>

        <url-pattern>/servlet/DisplayChart</url-pattern>

</servlet-mapping>

Servlet的作用就是将图片文件的二进制流数据写道response的输出流中,在客户端也就显示成了图片。

 

这篇关于JFreeChart学习笔记(创建JSP输出)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多