使用-JFreeChart来创建基于web的图表

亚瑟王 亚瑟王 2022-04-29 329 Java

WWW 的发展使得基于因特网的应用程序不再局限于静态或者简单的动态内容提供。传统的一些以软件包形式发布应用程序例如报表系统等都在逐渐搬到因特网上。但是这两者之间有着天壤之别,虽然对于数据获取、业务处理等方面基本类似,但是最大的差别在于用户界面。为了能在 web 浏览器上显示要求用户界面使用 HTML 以及图片的方式来展现数据,而传统的一些利用操作系统本身的控件来开发的用户界面无法适应琳琅满目的客户端,因此在这里也变得无能为力。回到本文的题目上来,为了创建一个可以在 web 浏览器上查看到图表一般有两种做法:第一种就是使用 applet 利用 java 本身对图形的支持来显示一个图表;第二种就是直接在 web 服务器端生成好图表图片文件后发送给浏览器。第一种方式显然对于客户端要求太高,随着现在主流浏览器放弃对 JAVA 的支持后,这种方式只适合一些局域网的应用,而对于因特网的环境就显得不太适合。因此我们下面将介绍一个 JAVA 的图表引擎 JFreeChart 用来产生基于 WEB 的图表。

JFreeChart 项目简介

JFreeChart 是开放源代码站点 SourceForge.net 上的一个 JAVA 项目,它主要用来各种各样的图表,这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。这些不同式样的图表基本上可以满足目前的要求。为了减少篇幅本文主要介绍前面三种类型的图表,读者可以触类旁通去开发其他样式的图表。下面几个是 JFreeChart 产生的这三种类型图表的结果:

使用-JFreeChart来创建基于web的图表
使用-JFreeChart来创建基于web的图表
使用-JFreeChart来创建基于web的图表

上面的三个图都是表示四个季度的某个产品的销量信息。在继续下面小节之前必须先准备好开发环境,因为是基于 WEB 浏览器的图表展现,因此需要一个 Servlet 引擎或者是 J2EE应用服务器(例如 WebSphere,Tomcat 等)。WEB 环境的搭建就不累赘了,读者根据喜好自行安装。JFreeChart 引擎本身需要到 SourceForge.net 上下载,地址如下:

JFreeChart 主页:

http://www.jfree.org/jfreechart/index.html

JFreeChart 下载页面:

http://sourceforge.net/projects/jfreechart/

下载的时候需要注意的是必须下载两个文件:JFreeChart 以及 Jcommon。目前最新配套版本是:JFreeChart 0.9.11 Jcommon 0.8.6

这里有点笔者在开发中遇见的问题需要注意的是:在使用 Eclipse 开发的时候会报一个莫名其妙的错误,错误可能指向某个类文件的第一行。遇到这样的问题一般是因为没有把Jcommon 的 jar 包设置到项目的类路径中的缘故。具体的原因不祥。

解读 JFreeChart 的源码结构

在开始使用 JFreeChart 之前我们有必要先大概了解一下 JFreeChart 本身的结构以及它所带一些例子程序,这样有助于我们下一步自行开发。下载 JFreeChart 包后已经带有非常丰富的例子,因为 JFreeChart 这个项目本身的使用文档非常少,因此学习它最好的办法就是学 习 它 所 带 的 例 子 源 码 。 在 包 org.jfree.chart.demo 中 有 几 十 个 文 件 用 于 展 示JFreeChart 所能支持的所有图表的结果。如果你的 JDK 是比较新的情况下可能在运行这些例子时会有问题,现象如下:

java.lang.UnsatisfiedLinkError: initDDraw

at sun.awt.windows.Win32OffScreenSurfaceData.initDDraw(Native Method)

at sun.awt.windows.Win32OffScreenSurfaceData.<clinit>(Win32OffScreenSurfaceData.java:141)

at sun.awt.Win32GraphicsDevice.<clinit>(Win32GraphicsDevice.java:58)

at sun.awt.Win32GraphicsEnvironment.makeScreenDevice(Win32GraphicsEnvironment.java:168)

at sun.java2d.SunGraphicsEnvironment.getScreenDevices(SunGraphicsEnvironment.java:240)

at sun.awt.Win32GraphicsEnvironment.getDefaultScreenDevice(Win32GraphicsEnvironment.java:61)

at java.awt.Window.init(Window.java:224)

at java.awt.Window.<init>(Window.java:268)

at java.awt.Frame.<init>(Frame.java:398)

at javax.swing.JFrame.<init>(JFrame.java:198)

at org.jfree.chart.demo.JFreeChartDemo.<init>(JFreeChartDemo.java:148)

at org.jfree.chart.demo.JFreeChartDemo.main(JFreeChartDemo.java:285)

Exception in thread "main"

这个错误是由于新版的 Swing 大量的使用了微软的 DirectDraw 的技术来提高画图的性能,而可能你的显卡在这时候会跟你闹点情绪或者显卡本身并不支持这样的一个技术。难道就没有办法了嘛?要解决这个问题也非常简单,我们可以屏蔽掉 DirectDraw,不让 Swing使用该技术就可以了。在运行这些代码时给虚拟机指定参数-Dsun.java2d.noddraw即可。这时可能你又该纳闷了,不说是基于 Web 的图表嘛,怎么又扯到 Swing 上了?这是因为为了使开发者容易上手,无需配置任何运行环境,所以这些例子都是基于 GUI 方式的用于展现给开发者如果生成一个图表,我们要学习的也就是如何利用这个引擎生成图表而不是怎么来显示一个图表。当我们把生成的图表对象 Export 到一个图像文件即可在 Web 上发布。

下面我们来介绍 JFreeChart 中几个核心的对象类:

使用-JFreeChart来创建基于web的图表

基本上我认为 JFreeChart 项目本身的类结构的设计并不是很好,首先在创建图表的时候用到了大量的工厂方法,这样做虽然可以简化创建图表对象的代码,但是对项目本身或者开发人员来讲自行扩展一种新的图表都仍然是一件很麻烦的事情;其次除图表对象本身外其余的类过于复杂,使用者必须去了解每个类型的图表对象应该对应哪些 Axis、Plot、Renderer类,并且必须非常熟悉这些类的构造函数中每个参数的具体含义。这些问题都大大困扰很多

初学者。不过,虽然存在很多问题,但是 JFreeChart 本身仍不失为一个非常优秀的图表引擎,况且项目本身也在逐渐的发展中。

在非常简略的介绍了 JFreeChart 本身的代码结构后,下面我们开始动手试验几个常用的图表并把他们放到 web 上。

使用 JFreeChart 生成各种样式的图表

限于篇幅的问题我们在这里只实现两种常用的图表,其他类型图表读者可以触类旁通。我们先给出柱状图的实现,饼图的实现再来跟柱状图进行比较。

【下载地址】

百度网盘链接:https://pan.baidu.com/s/1PuDyMjgx87VVTr67bHt0_w

提取码:iwtq


相关文章


使用-JFreeChart来创建基于web的图表

使用-JFreeChart来创建基于web的图表

XStream使用文档

XStream使用文档

WebService发布过程及常见问题

WebService发布过程及常见问题

webpack实战入门进阶调优分享

webpack实战入门进阶调优分享

weblogic调优参数及监控指标

weblogic调优参数及监控指标

weblogic节点管理

weblogic节点管理

weblogic管理控制台概述

weblogic管理控制台概述

weblogic-部署和启动

weblogic-部署和启动

WebLogic-Server-性能及调优-调优-Java-虚拟机

Java 虚拟机(Java virtual machine,简称 JVM)是一种虚拟“执行引擎”实例,可在微处理器上执行 Java 类文件中的字节码。调整 JVM 的方式会影响 Weblogic Server 和应用程序的性能。

Velocity用户教程

Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。

Velocity用户手册

Velocity 用户手册是帮助页面设计者和内容提供者认识 Velocity 和其简单而功能强大的脚本语言――Velocity 模板语言(VTL)。在手册上的许多例子,都是用 Velocity 插入动态的内容到网页上,但是所有的 VLT 例子都能应用到其他的页面和模板中。

知之

知之平台是全球领先的知识付费平台。提供各个领域的项目实战经验分享,提供优质的行业解决方案信息,来帮助您的工作和学习

使用指南 建议意见 用户协议 友情链接 隐私政策 Powered by NOOU ©2020 知之