6.3 ChartFactory类

在上面的实例代码中,我们使用ChartFactory类来组装一个JFreeChart实例来显示一个直方条形图。下面我们更仔细的看一下该类是如何工作的,因此我们可以看到直方条形图更多底层的框架结构。理解底层结构的关键是能定制图表的外观。下面是ChartFactory方法createBarChart()方法部分代码:

CategoryAxis categoryAxis = new CategoryAxis(categoryAxisLabel);
ValueAxis valueAxis = new NumberAxis(valueAxisLabel);
BarRenderer renderer = new BarRenderer();
……
CategoryPlot plot = new CategoryPlot(dataset, categoryAxis, valueAxis,
renderer);
plot.setOrientation(orientation);
JFreeChart chart = new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT, plot, legend);

以下就是代码所做的工作。

  • 我们的直方条形图有两个轴,一个轴显示dataset(CategoryAxis)的种类,另一个是显示带有数据(NumberAxis)刻度的数据轴。上面代码中代码1、2行建立了这两个轴,轴的标签是createBarChart()方法传入的。
  • 第三行,创建了一个BarRender——该类为每一个数据项目画直方图。该render处理大部分画图工作,我们后续代码也会看到可以使用另一个类型的render替换现有的render,来改变图表的整个外观。
  • Dataset、axes和render都由CategorryPlot来管理,CategorryPlot系统组件之间的大部分交互工作。当我们定制一个图表时,我们经常需要先获得整个图表plot、renderer和dataset的引用。在代码的第四行,创建了一个plot,然后其他组件对它进行赋值。
  • 最后,在JFreeChart实例中,这个plot用指定的标题被封装。JFreeChart类提供了比较高层次的访问图表。但在这个plot曾思图表就大部分被定义出来了(Plot管理很多对象,例如axes、dataset和renderer)。

图表的内部结构基本上是由上面的知识理论组成。在后续的章节,我们会逐渐学习更多的定制我们图表的方法。