北方站长站
客服热线:0632-5117766

构建可扩展的Java图表组件

[2005-12-26 00:00:00] 作者:Northz.com 来源:北方站长站

Tags:组件 图表 扩展 构建 int public 一个 坐标 我们 数据

  

完成折线图sts北方站长站
  通过前面的实现代码,我们来看一个完整的折线图示例:sts北方站长站
double[] y = new double[]sts北方站长站
{ 12.5,14.1,13.2,11.4,13.25,12.32 }; sts北方站长站
 try { sts北方站长站
  DataSeries ds = new DefaultDataSeries(Primary2ObjectUtil.Doulbe2Object(y)); sts北方站长站
  XAxis xaxis = new XAxis(new XScale(0,y.length+1),ds.size()); sts北方站长站
  YAxis yaxis = new YAxis(new YScale(10,15),4); sts北方站长站
  xaxis.setDrawGrid(true); sts北方站长站
  yaxis.setDrawGrid(true); sts北方站长站
  LinePlot plot = new LinePlot(ds,xaxis,yaxis); sts北方站长站
  Chart chart = new Chart(xaxis,yaxis,plot); sts北方站长站
  JFrame frame = new JFrame("Line Plot Demo"); sts北方站长站
  frame.setSize(400,300); sts北方站长站
  frame.getContentPane().add(chart); sts北方站长站
  frame.setVisible(true); sts北方站长站
 } sts北方站长站
 catch (InvalidDataException e) sts北方站长站
 { sts北方站长站
  e.printStackTrace(); sts北方站长站
 }
sts北方站长站
  下面是这个程序运行起来的屏幕截图:sts北方站长站
 构建可扩展的Java图表组件sts北方站长站
(单组数据的折线图) sts北方站长站
构建可扩展的Java图表组件sts北方站长站
(有多组数据的折线图) sts北方站长站
  扩展其它类型的图表sts北方站长站
  通过前面的例子,我们知道要实现特定类型的图表,只要实现特定的Plot类就可以了。如果数据有特殊格式,只需再扩展一个DataSeries就可以了。为使大家加深理解,我们再以一个柱状图为例子作讲解。sts北方站长站
  在第一节的图1-2和图1-3中,我们知道,一组数据除了用折线图表示之外,还可以表示成柱状图的形式。在这里我们就借用折线图的数据,来实现一个BarPlot。下面列出了BarPlot的关键代码:sts北方站长站
public class BarPlot extends Plotsts北方站长站
{ sts北方站长站
 …… sts北方站长站
 public void draw(Graphics g, DataSeries ds, int index) sts北方站长站
 { sts北方站长站
 if ( ds == null ) return; sts北方站长站
 /*每组柱子的个数*/ sts北方站长站
 int bars = this.dataSeries.size(); sts北方站长站
 /*出每个柱子应有的宽度*/ sts北方站长站
 int barWidth = (int) ((double)xAxis.width/((double)ds.size()+1)/bars-barSpace); sts北方站长站
 if ( barWidth <=0 ) barWidth = 1; sts北方站长站
 int barx,bary,barw,barh; sts北方站长站
 int barGroupWidth = barWidth*bars; sts北方站长站
 double ymin = yAxis.getScale().getMin(); sts北方站长站
 for ( int i = 0;i<ds.size(); i++ ) sts北方站长站
 { sts北方站长站
  barx = (int)(xAxis.getScale().getScreenCoordinate(i+1) - barGroupWidth/2.0d) + index*barWidth; sts北方站长站
  double val = ((Double)ds.getYData(i)).doubleValue(); sts北方站长站
  bary = yAxis.getScale().getScreenCoordinate(val); sts北方站长站
  if ( ymin<0) if ( val<0 ) sts北方站长站
  { sts北方站长站
   barh = bary-yAxis.getScale().getScreenCoordinate(0); sts北方站长站
   bary = bary-barh; sts北方站长站
  }sts北方站长站
  else sts北方站长站
  { sts北方站长站
   barh = yAxis.getScale().getScreenCoordinate(0)-bary; sts北方站长站
  } sts北方站长站
  else sts北方站长站
  { sts北方站长站
   barh = yAxis.getScale().getScreenCoordinate(ymin)-bary; sts北方站长站
  } sts北方站长站
  barw = barWidth; g.setColor(barColor); sts北方站长站
  g.fillRect(barx,bary,barw, barh); sts北方站长站
  g.setColor(Color.BLACK); sts北方站长站
  g.drawRect(barx,bary, barw, barh); sts北方站长站
 }sts北方站长站
}
sts北方站长站
  BarPlot的实现比LinePlot稍微复杂一点。主要是要计算每个柱子的位置,宽度和高度。由于考虑到多组柱子以及柱子的值为负数时坐标不同,所以计算要繁索一点。但总体来说,实现BarPlot也是相当简单的。由于柱状图运行代码与折线图类似,这里就不列出演示代码。下面来看看程序在几种情况下的运行画面:sts北方站长站
构建可扩展的Java图表组件sts北方站长站
 (单组数据的柱状图)sts北方站长站
构建可扩展的Java图表组件sts北方站长站
 (多组数据的柱状图)sts北方站长站
构建可扩展的Java图表组件sts北方站长站
 (有负值的柱状图)sts北方站长站
  现在我们有了画折线图的类LinePlot和画柱状图的类BarPlot。我们要生成一个折线图与柱状图组合起来的例子。还是来看看代码是如何实现的:sts北方站长站
DataSeries ds = new DefaultDataSeries(Primary2ObjectUtil.Doulbe2Object(y1)); sts北方站长站
XAxis xaxis = new XAxis(new XScale(0,y1.length+1),ds.size()); sts北方站长站
YAxis yaxis = new YAxis(new YScale(10,15),4); sts北方站长站
xaxis.setDrawGrid(true); sts北方站长站
yaxis.setDrawGrid(true); sts北方站长站
LinePlot linePlot = new LinePlot(ds,xaxis,yaxis);sts北方站长站
BarPlot barPlot = new BarPlot(ds,xaxis,yaxis);sts北方站长站
/*先生成Bar Chart*/sts北方站长站
Chart chart = new Chart(xaxis,yaxis,barPlot);sts北方站长站
/*然后将Line Plot加到Bar Chart中*/ sts北方站长站
chart.addPlot(linePlot);
sts北方站长站
  代码中,我们先建立了一个Line Plot和一个Bar Plot,再生成了一个Bar Chart,然后再将Line Plot加到Bar Chart中。一个组合图表就简简单单的完成了。来看看:sts北方站长站

 

News

 

info

 

down

出售手机裁听器,手机跟踪定位系统    企业网站,网城,购物网,都市导购,校园网    网上书店系统    上海电信机房服务器托管,双线主机托管    美女图片馆    15G 高清晰图片资源 无水印    室内装潢材料新产品杰威尔艺术漆    收一万ip的美女图片    大量收购个人网址导航网站    出售网址站PR=4alexa=119,764    

上一页 1 2 3 4 5 6 7 8 9 下一页

下一篇链接:Tapestry组件使用总结

上一篇链接:用XSLT和XML改进Struts

评论】 【打印】 【加入收藏】 【关闭→论坛 →博客 →数据中心

 共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面