JfreeChart的简单应用

http://www.jfree.org/jfreechart/中一开始就说自己是为了开发者制作专业的高质量的图表的一个100%纯免费(自由的)java类库。
从出现到现在已经有9个多年头了。无疑现在是java报表工具的首选了。

使用之前肯定要先获得jar包(这点可以写入java开发的规范中去了)。
1:从http://sourceforge.net/projects/jfreechart/files/下载jfreechart-1.0.13 (最新版)。我们用到的只有三个文件: jfreechart - 1.0.13.jar 、jcommon-1.0.16.jar、gnujaxp.jar。

2:其核心类包 为:
org.jfree.chart:核心类库,包含JFreeChart 和 ChartPanel .
org.jfree.data:描述了各种类型的数据集
org.jfree.chart.plot:图表区域对象

核心的类 文件有:
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图表中每个项目的鼠标点击链接
XXXXXToolTipGenerator: 用于生成图象的帮助提示,不同类型图表对应不同类型的工具提示类

3:使用JFreeChart生成图表

1: 柱状图
用到的类有:
org.jfree.data.category.DefaultCategoryDataset: 继承于CategoryDataset类,
方法: public void addValue (double value,
java.lang.Comparable rowKey,
java.lang.Comparable columnKey)

org.jfree.chart.ChartFactory :得到各种类型的chart的工厂类。
public static JFreeChart createBarChart (java.lang.String title,
java.lang.String categoryAxisLabel,
java.lang.String valueAxisLabel,
CategoryDataset dataset,
PlotOrientation orientation,
boolean legend,
boolean tooltips,
boolean urls)
org.jfree.chart.ChartUtilities
将chart转化为图片的方法集合类。
2:饼状图:
和上面类似:我们可以用PieDataset作为数据集。
ChartFactory.createPieChart3D(title,
dataset,
true, // 是否显示图例
false,// 是否生成工具
false// 是否生成url
);得到Jfreechart。

Jfreechart的中文支持并不是很好,需要对其设置字体。

下面是一个简单的例子:

package cn.shy.jfree; import java.awt.Color; import java.awt.Font; import java.io.FileOutputStream; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartUtilities; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.CategoryAxis; import org.jfree.chart.axis.ValueAxis; import org.jfree.chart.labels.StandardCategoryItemLabelGenerator; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.renderer.category.BarRenderer; import org.jfree.data.category.CategoryDataset; import org.jfree.data.category.DefaultCategoryDataset; import org.jfree.data.general.Dataset; public class JchartUtils { public JFreeChart createChart(Dataset dataSet, String title, String xName, String yName) { CategoryDataset dataset =(CategoryDataset) dataSet; JFreeChart chart = ChartFactory.createBarChart( title, // 标题 xName, // x轴的标签 yName, // y轴的标签 dataset, // 数据 PlotOrientation.VERTICAL, // 图表方向:水平、垂直 true, // 是否显示图例(对于简单的柱状图必须是false) true, // 是否生成工具 true // 是否生成url ); // 获得图表区域对象 CategoryPlot plot = chart.getCategoryPlot(); // 设置图表的纵轴和横轴o CategoryAxis domainAxis = plot.getDomainAxis(); // 设置距离图片左端距离此时为10% domainAxis.setLowerMargin(0.1); // 设置距离图片右端距离此时为百分之10 domainAxis.setUpperMargin(0.1); // 图表横轴与标签的距离(10像素) domainAxis.setCategoryLabelPositionOffset(10); // 横轴标签之间的距离20% domainAxis.setCategoryMargin(0.2); //水平底部列表 domainAxis.setLabelFont(new Font("黑体",Font.BOLD,14)); //水平底部标题 domainAxis.setTickLabelFont(new Font("宋体",Font.BOLD,12)); //垂直标题 ValueAxis rangeAxis=plot.getRangeAxis();//获取柱状 rangeAxis.setLabelFont(new Font("黑体",Font.BOLD,15)); // 设置最高的一个柱与图片顶端的距离(最高柱的10%) rangeAxis.setUpperMargin(0.1); // 设置图表的颜色 BarRenderer renderer= new BarRenderer(); renderer.setBaseOutlinePaint(Color.red); // 第一个柱子的颜色为青色 renderer.setSeriesPaint(0, new Color(0, 255, 255)); // 边框为黑色 renderer.setSeriesOutlinePaint(0,Color.BLACK); // 第二个柱子的颜色为绿色 renderer.setSeriesPaint(1, new Color(0, 255, 0)); // 边框为红色 renderer.setSeriesOutlinePaint(1,Color.red); // 第三个柱子的颜色为绿色 renderer.setSeriesPaint(2, Color.gray); // 边框为红色 renderer.setSeriesOutlinePaint(1,Color.red); //组内柱子间隔为组宽的10% renderer.setItemMargin(0.1); //显示每个柱的数值,并修改该数值的字体属性 renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator()); renderer.setBaseItemLabelFont(new Font("黑体",Font.BOLD,8));//8号黑体加粗 renderer.setBaseItemLabelPaint(Color.black);//字体为黑色 renderer.setBaseItemLabelsVisible(true); // 使用我们设计的效果 plot.setRenderer(renderer); chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12)); chart.getTitle().setFont(new Font("宋体", Font.PLAIN, 12)); return chart; } // 生成柱状图 public void createBarChartPic(CategoryDataset dataset){ JFreeChart chart= createChart(dataset,"销量","城市","数量"); FileOutputStream fos_jpg = null; try { fos_jpg=new FileOutputStream("c:\\fruit1.jpg"); ChartUtilities.writeChartAsJPEG(fos_jpg, chart, 600, 300); }catch (Exception e) { e.printStackTrace(); } finally{ try { fos_jpg.close(); } catch (Exception e) { e.printStackTrace(); } } } public static void main (String args[]) { JchartUtils jt = new JchartUtils(); DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.addValue(100, "北京", "苹果"); dataset.addValue(100, "上海", "苹果"); dataset.addValue(100, "广州", "苹果"); dataset.addValue(200, "北京", "梨子"); dataset.addValue(200, "上海", "梨子"); dataset.addValue(200, "广州", "梨子"); dataset.addValue(300, "北京", "葡萄"); dataset.addValue(300, "上海", "葡萄"); dataset.addValue(300, "广州", "葡萄"); dataset.addValue(400, "北京", "香蕉"); dataset.addValue(400, "上海", "香蕉"); dataset.addValue(400, "广州", "香蕉"); dataset.addValue(500, "北京", "荔枝"); dataset.addValue(500, "上海", "荔枝"); dataset.addValue(500, "广州", "荔枝"); jt.createBarChartPic(dataset); } }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值