1、JFreeChart与专题符号,1、JFreechart剖析,2、专题符号实现,1.1 简介 开源的Java图形开发包,可以实现饼图、柱状图、线图、点图、时序图、甘特图、股票行情图、混和图 、温度计图、刻度图等常用商用图表最新版本为JFreeChart 1.0.13,可以到http:/www.object- 是例子程序,开发时候加入下面三个jar包:jfreechart-1.0.13.jar 、jcommon-1.0.13.jar、gnujaxp.jar,1、JFreechart剖析,1.2 基本结构 JFreeChart常用的API大致可以分为Dataset、Plot、Axis、Render
2、er、JFreeChart、URLGenerator、ToolTipGenerator、ChartFactory几大类,1、JFreechart剖析,1.3 图形对象JFreeChart对象JFreeChart 库中最重要的类之一是它本身,名为 JFreeChartJFreeChart 可以生成很多图形对象,它的工厂类提供了 33 个工厂方法( ChartFactory 类 )用于生成不同的图形对象 图形对象(JFreeChart) ,由主标题 (Title) ,子标题 (SubTitle) ,图形的绘制结构(Plot),图例(Legend)等几个主要对象组成每个 JFreeChart 对象只
3、能有 1 个 Title 对象, 1 个 Plot 对象,可以有多个 SubTitle 对象。 JFreeChart 对象可以进行的操作有:背景的设置(背景颜色、背景图片、透明度等)、边框的设置(是否可见、笔画、 Paint 等)、渲染方式的设置、标题对象的设置、子标题对象的增删查操作。,1、JFreechart剖析,1.3 图形对象的处理 Plot对象,1、JFreechart剖析,图形的绘制结构对象。图形对象包含多种不同的Plot对象,每个Plot对象都在实例化的时候创建。所有的Plot共有的操作有:背景设置、前景透明度设置、无数据存在情况的设置、放大缩小比例的设置,大部分 Plot 对象
4、还有设置 Datset 、设置 Renderer 对象操作Plot 的具体实现类主要由以下重要对象组成: 渲染对象(Renderer),数据源(Dataset) ,区域轴(DomainAxis,相当于 x 轴) ,范围轴(RangeAxis,相当于 y 轴)不同的 Plot 对象组成方式不尽相同,一般都含有 Datset 对象。饼状图相关的 Plot 对象(MultiplePiePlot 、 PiePlot 、 PiePlot3D 、 RingPlot)中都不含有 Renderer 对象、 DomainAxis 对象、 RangeAxis 对象,1.3 图形对象的处理 Dataset接口,1、
5、JFreechart剖析,定义了产生图表时所需要的数据结构,有三个主要的子类接口:CategoryDataset、PieDataset、SeriesDatasetCategoryDataset 接口的实现类维护一个三元组的列表结构。不同的实现类中value 的类型不相同。唯一确定一个三元组。CategoryDataset的实现类提供对这个三元组的增删改查操作PieDataset 接口的实现类维护一个二元组的列表结构。Key唯一确定一个二元组。 PieDataset的实现类提供对这个二元组的增删改查操作。可通过对CategoryDataset类型的对象指定行或者列转化为一个二元组SeriesDa
6、taset 接口的实现类维护一种特定数据结构的列表。以TimeSeriesCollection为例。它维护一个TimeSeries对象列表,提供对该列表的增删查操作。每个TimeSeries对象维护一个列表,提供对该列表的增删改查操作,1.3 图形对象的处理 Renderer对象,1、JFreechart剖析,图形的渲染对象。 JFreeChart 提供了两个接口 CategoryItemRenderer 和 XYItemRenderer 、 1 个抽象类 AbstractRenderer 供具体的 Renderer 类实现,给出了将近 50 种具体实现类Renderer 对象可进行的操作有:
7、对 item label 的默认设置、绘制图形的边框默认设置、绘制图形的默认设置、以及对指定 item label 的设置、指定绘制图形的设置。与具体绘制的图形相关的属性都可以通过 Renderer 对象设置不同的 Renderer 的实现类实现了不同的显示方式,在含有 Renderer 对象的 JFreeChart 对象中, Renderer 对象决定了JFreeChart对象的显示方式。例如:柱状图的Plot对象中默认的Renderer对象是 BarRenderer 对象,通过设置 Plot 对象的Renderer对象为 LineAndShapeRenderer ,则柱状图变为线图。使用中
8、一般不需要显式的实例化一个 Renderer 对象,一般通过 JFreeChart 对象的 Plot 对象调用现有的 Renderer 对象进行重新设置等操作,1.3 图形对象的处理 Axis对象,1、JFreechart剖析,JFreeChart 提供了两种类型的坐标轴: CategoryAxis (类别轴)和 ValueAxis (值轴),RangeAxis 又有 3 个子类: DateAxis (时间轴)、 NumberAxis (数字轴)、 PeriodAxis (时期轴)Axis 对象可进行的操作有:坐标轴标题的设置、坐标线的设置(笔画、Paint、是否可见等)、刻度线的设置(是否可
9、见、笔画、Paint、位于绘图区域的长度、位于绘图区域外的长度等)、刻度标示的设置(笔画、Paint、字体、与轴的距离等)、坐标轴范围设置等CategoryAxis 对象还可以进行的操作有: 刻度标示间距设置( 最小间距、最大间距、指定间距)等ValueAxis 对象可进行的操作有:轴端设置(显示的图形形状)、范围设置(是否自动产生范围、自动产生的最小范围、最大范围、指定确定范围、指定范围大小等)、间隔设置(是否自动产生间隔、指定间隔)等 DateAxis 对象还有对时间刻度显示格式的设置操作,1.4 生成图表 建立Dataset。所有的数据都存放在Dataset中的。(创建一个数据源(dat
10、aset)来包含将要在图形中显示的数据)建立JFreeChart。将dataset中的数据导入到JFreeChart中。(创建一个 JFreeChart 对象来代表要显示的图形 )设置JFreeChart的显示属性。这一步可以省略,使用默认的JFreeChart显示属性渲染图表。即生成图片页面图片显示,1、JFreechart剖析,1、JFreechart剖析,1.5 示例,2.1 类结构,2、专题符号实现,2.1 类结构 TChart类,2、专题符号实现,TChart类为专题符号的抽象基类,定义了符号的共同参数JFreechart对各种图表没有抽象出继承关系,只是用一个静态工厂类的静态方法来
11、生成多种JFreechart对象;专题符号各子类的继承关系如下:,2.1 类结构 ISymbol接口及ISymbolFactory接口,2、专题符号实现,ISymbol为符号绘制的接口,其方法包含drawSymbol、drawLegend等TChart类及其子类实现了ISymbol接口每个chart子类对应一个工厂类,用于生成该类的实例,该工厂类实现了ISymbolFactory接口ISymbolFactory用于生成ISymbol接口,进而调用不同的符号对象生成符号,2.1 类结构 JThematicChart类,2、专题符号实现,专题符号的实施类,对应于图集中的一幅插图,包含数据集对象、图
12、例对象、标注对象等,根据客户端请求读取数据库填充数据集对象,根据系统配置文件初始化图例对象、标注对象,调用工厂类生成专题符号,并绘制为图片返回客户端 PropertiesUtil p = new PropertiesUtil(); Properties properties=p.getProperties(); String symbolFactory=properties.getProperty(String.valueOf(chartType); ISymbolFactory iSymbolFactory=(ISymbolFactory) Class.forName(symbolFactory).newInstance(); ISymbol iSymbol=iSymbolFactory.createSymbol();,2.2 流程 解析客户端请求,获取当前请求图幅、图表类型、时间等参数根据图表类型调用工厂类生成相应的图表对象判断当前范围内的符号个数,并读取相应数据装载到Dataset接口生成在当前范围内的各个JFreechart对象,根据符号定位点坐标绘制成一幅透明的PNG图片,同时生成map标签,传送到客户端,2、专题符号实现,谢谢!,