前言:因为都是搞开发的,所以前面的一些基本操作省略,比如导入JFREECHART的包的操作等等
1。呈现在用户面前的最终是一个图表,因此首先需要获得一个图表对象:JFreeChart,而JFreeChart图表对象是通过ChartFactory去获得的,从工厂中取出各式各样的图表,比如饼图、柱状图。虽然在此使用工厂模式不利于扩展,但是从JFreeChart提供的样式来看,基本上能满足大部分的需求。
JFreeChart chart = ChartFactory.createBarChart
("CategoryChartDemo", //显示图表标题
"fruit", //横坐标显示标签
"capacity", //纵坐标显示标签
dataset, //这个数据集对象需要从第二步中去获取(图表域中需要显示的数据集)
PlotOrientation.VERTICAL, //图表方向,水平和垂直,即横坐标与纵坐标可以互换显示
true, //是否显示最下面图表提示框,即某种颜色代表什么意思
true, //是否显示工具提示,即鼠标放到图表区域上时会有提示信息
true); //是否显示URL链接
2。创建图表对象时,那么这个图表对象中应该显示些什么数据呢?那么就需要创建一个数据集对象:xxxDataset.在该对象中可以设置自己的数据集合。比如:
public static CategoryDataset getDateSet()
{
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(50, "beijing", "apple");
dataset.addValue(60, "beijing", "banana");
dataset.addValue(70, "beijing", "pear");
dataset.addValue(80, "shanghai", "apple");
dataset.addValue(90, "shanghai", "banana");
dataset.addValue(100, "shanghai", "pear");
dataset.addValue(10, "shenzhen", "apple");
dataset.addValue(20, "shenzhen", "banana");
dataset.addValue(65, "shenzhen", "pear");
return dataset;
}
3。至此,已基本上完成了JFreeChart的最简单的柱状图的显示。那么可以通过ChartFrame对象将该图表对象显示在桌面应用程序上:
ChartFrame frame = new ChartFrame("CategoryDemo", //应用程序最上面的标题栏
chart); //将哪个图表对象进行显示
frame.pack();
frame.setVisible(true);
也可以通过ChartUtilities对象将图表输出到文件中:
ChartUtilities.writeChartAsJPEG(new FileOutputStream("d:/wuhaiming.jpg"), //要输出的文件
chart, //要输出的图表对象
600, //文件长
480); //文件宽
相信你已经也能运行出来了,但是就这样你满足了吗?比如:图表的颜色我就是想用蓝颜色,字体我就想用宋体,图表区域与坐标轴之间的间隔我就想它们间隔远一点等等这些需求,怎么办?那就请继续往下看
4。如果你想设计个性化的图表样式,那么就需要用到xxxPlot:图表区域对象了,该对象基本上最终决定了显示什么样式的图表.那么就开始我们定制化的旅程吧!!!首先从坐标轴开始进行个性化的定制,要想对坐标轴进行定制就需要从xxxPlot图表区域对象中取得一个xxxAxis:用于处理两个轴的Axis对象,比如设置坐标轴是否可见、坐标轴标签的字体、样式、大小、边距设置等等这些需求:
CategoryPlot plot = (CategoryPlot) chart.getPlot();
//用于处理图表的两个轴:横轴与纵轴
CategoryAxis axis = plot.getDomainAxis();
//坐标轴是否可见
axis.setVisible(true);
//设置坐标轴标签的标题
axis.setLabel("NewLabel");
//设置坐标轴标签的字体,样式,大小
axis.setLabelFont(new Font("Arial", Font.BOLD, 18));
//设置坐标轴的标尺是否显示
axis.setTickMarksVisible(true);
//分类轴距离下(左)边距
axis.setLowerMargin(0.1);
//分类轴距离上(右)边距
axis.setUpperMargin(0.1);
对以上的这些效果还满意吗?如果不满意的话大家可以自己去尝试
5。好了,坐标轴已经调得差不多了,但是我还想对图表中的数据区域进行样式的调整,怎么办?这时候就需要用xxxRenderer:用于处理数据区域的Renderer对象了,比如设置柱状图形的颜色为自己想要的颜色、柱状的阴影想改变为绿色等等:
//用于处理数据图形区域的样式的Renderer对象
BarRenderer renderer = (BarRenderer) plot.getRenderer();
//设置每个BAR之间的间隔,即两根柱状体之间的间隔
renderer.setItemMargin(0.1);
//是否需要画出图形的边框
renderer.setDrawBarOutline(true);
//指定图形的颜色,即柱状区域的颜色
renderer.setSeriesPaint(0, Color.BLUE);
renderer.setSeriesPaint(1, Color.YELLOW);
renderer.setSeriesPaint(2, Color.GREEN);
//调整图形的阴影效果,即柱状区域的阴影效果
renderer.setShadowXOffset(10);
renderer.setShadowYOffset(10);
//设置阴影的颜色
renderer.setShadowPaint(Color.PINK);
同样如果对以上的这些效果还不满意的话大家可以自己去尝试。
6。整个图表的样式都调整得差不多了,最后在来点好东东,第一个:工具提示类,也就是说当你把鼠标移动到柱状区域时会给你一些提示信息,JFREECHART会默认给你一些提示,但是如果你不满意也可以自己自定义个性化的提示,那么这时候就得用到xxxToolTipGenerator:用于生成图象的帮助提示的对象了,它可以根据自己的需要进行提示:
//修改工具提示内容
renderer.setSeriesToolTipGenerator(0, new StandardCategoryToolTipGenerator("
{0} {1} is {2}", NumberFormat.getInstance()));
renderer.setSeriesToolTipGenerator(1, new StandardCategoryToolTipGenerator(
"hehe, im fruit, {1}", NumberFormat.getInstance()));
renderer.setSeriesToolTipGenerator(2, new StandardCategoryToolTipGenerator("my
capacity is {2}", NumberFormat.getInstance()));
那么下面介绍第二个:给图表增加链接操作,也就是说当把鼠标放到任意一根柱子的上方时,点击后可以进入到另一个页面显示更详细的信息,如果你有这个需求,那么你就得用到xxxURLGenerator:用于生成WEB图表中每个项目的鼠标点击链接操作的这个对象了,不过请大家注意,仅用于生成WEB图表哦,一般是Application是不行的,但是在这里我也把它的用法写出来:
//带URL的柱状图,为每个柱子添加一个URL链接,但是好像是需要浏览器的支持哦
renderer.setSeriesItemURLGenerator(0,
new StandardCategoryURLGenerator("http://www.baidu.com"));
7。最后,相信大家对JFREECHART也有个基本的了解了,其它的比如饼图、曲线图等等都是差不多的,我就不在重复了。该篇文章主要把开发JFREECHART的总体思路以及开发步骤跟大家进行分享了,也把JFREECHART的几个核心类进行详细的讲解了:
org.jfree.chart.JFreeChart:图表对象,任何类型的图表的最终表现形式都是在该对象进行一些属性的定制。JFreeChart引擎本身提供了一个工厂类用于创建不同类型的图表对象
org.jfree.data.category.XXXDataSet:数据集对象,用于提供显示图表所用的数据。根据不同类型的图表对应着很多类型的数据集对象类
org.jfree.chart.plot.XXXPlot:图表区域对象,基本上这个对象决定着什么样式的图表,创建该对象的时候需要Axis、Renderer以及数据集对象的支持
org.jfree.chart.axis.XXXAxis:用于处理图表的两个轴:纵轴和横轴
org.jfree.chart.render.XXXRender:负责如何显示一个图表对象
org.jfree.chart.urls.XXXURLGenerator:用于生成Web图表中每个项目的鼠标点击链接
XXXToolTipGenerator:用于生成图象的帮助提示,不同类型图表对应不同类型的工具提示类
希望本篇文章能对大家有所帮助,当然,这其中也有很多不足,希望大家多多指出!!!谢谢