`
seaoop
  • 浏览: 15443 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JFreechart快速应用指南

阅读更多

前言:因为都是搞开发的,所以前面的一些基本操作省略,比如导入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:用于生成图象的帮助提示,不同类型图表对应不同类型的工具提示类

 

 

希望本篇文章能对大家有所帮助,当然,这其中也有很多不足,希望大家多多指出!!!谢谢

0
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics