快速业务通道

构建可扩展的Java图表组件 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
; 0.0 && max < 0.0) vrange = (min - max) * -1.0; double i = screenMax - screenMin; i = ((double)(value - screenMin) * vrange) / i; i += min; return i; } public void setMax(double max){this.max = max;} public void setMin(double min){this.min = min;} public double getMax(){return max;} public double getMin(){return min;} public int getScreenMax(){return screenMax;} public int getScreenMin(){return screenMin;} public void setScreenMax(int screenMax){this.screenMax =screenMax;} public void setScreenMin(int screenMin){this.screenMin = screenMin;} }

在上面的Axis类代码中,我们在原有的ChartWidget接口的基础上,为Axis添加了几个其它的属性:轴线的颜色axisColor,网格线的颜色gridColor及网格线的可见属性drawGrid。还有刻度线的长度和个数tickLength和tickCount。而peerAxis属性是参考坐标轴,在绘制坐标轴时的会用到。 Scale类也是抽象的,因为横轴和纵轴的屏幕坐标的转换方式不一样,所以getScreenCoordinate()方法留待子类来实现它。

构建可扩展的Java图表组件(6)

时间:2010-09-13

图表形状(Plot)

组成图表还有一个最重要的类,负责描述数据的图表形状,我们称之为Plot。Plot应能绘制多组数据,而这组数据呢,我们专门用一个模型来描述它,这就是DataSeries。由于我们在这里讨论的是二维图表,所以DataSeries应能提供两组分别代表X和Y坐标的数据。还是来看看它们的类图(图2-6):

构建可扩展的Java图表组件 - 编程入门网

图2-6

为了plot能绘制多组数据,除了从ChartWidget继承来的draw(Graphics)方法外,plot还提供了draw(Graphics,DataSeries,int)方法,用来绘制单组的数据。下面的代码更能说明问题:

public abstract class Plot implements ChartWidget {  protected int x;  protected int y;  protected int width;  protected int height;  protected XAxis xAxis;  protected YAxis yAxis;  protected ArrayList dataSeries;  public int getX(){return x;}  public int getY(){return y;}  public int getWidth(){return width;}  public int getHeight(){return height;}  public void addDataSeries(DataSeries ds)  {   dataSeries.add(ds);  }  public void removeDataSeries(DataSeries ds)  {   dataSeries.remove(ds);  }  public void draw(Graphics g)  {   for( int i=0;i<dataSeries.size();i++ )    draw(g,(DataSeries)dataSeries.get(i),i);  }  public abstract void draw(Graphics g,DataSeries ds,int index); }

Plot类也被设计成了抽象类,具体的绘制方法由子类为实现。而DataSeries类的过于简单,在此我们就不列出代码了。

构建可扩展的Java图表组件(7)

时间:2010-09-13

图表(Chart)

最后就是将上面的元素合成一个完整的图表,即Chart类。一个Chart有一个横轴和一个纵轴以及至少一个Plot,并且可以为它添加多个Plot。我们最后来看一下整个Chart及其相关类的UML关系图:

构建可扩展的Java图表组件 - 编程入门网

图2-7

由于篇幅有限,在此就不列出Chart类的代码了。

完成一个折线图

由于前面介绍的只是一些接口或抽象类,要完成一个图表组件,还必须实现它们,下面我们以一个折线图为例,来完成一个完整的折线图。

实现x轴和y轴

其实前面的Axis抽象类已经完成一个大部分的操作,余下的就是分别完成x轴和y轴的绘制了。在这里我们就不打算列出完整的类代码,只列出关键的实现部分。

Public class XAxis extends Axis {  ……  public void draw(Graphics g)  {   if ( ! (scale instanceof XScale) )    return;   int ticks =

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号