(原创)JFreeChart入门简介

经过三天的学习,现在对于JFreeChart有了一些了解,下面说一下什么是JFreeChart以及如何用JFreeChart创建简单的图形。

        JFreeChart是JAVA平台上的一个开放的图表绘制类库。它完全使用JAVA语言编写,是为applications, applets, servlets 以
及JSP等使用所设计。JFreeChart可生成饼图(pie charts)、柱状图(bar charts)、散点图(scatter plots)、时序图(time
- series)、甘特图(Gantt charts)等等多种图表,并且可以产生PNG和JPEG格式的输出,还可以与PDF和EXCEL关联。

      我们在建立报表时经常使用的图形有饼状图,柱状图,线形图,所以现在我将说明一下这些图的画法。

         但是在画图之前,有一些问题是我们需要先知道的,下面我分为几点来说:

  1. 不同的图都有一个各自的数据集xxxDataset,这些数据集的作用是提供图表呈现的数据,但是由于不同图用到的数据集不
    同,所以需要对各个图表所呈现的数据内容有所了解,才能针对当前数据的结构选择最好的图表。
  2. JFreeChart如果要建立出一个最简单的图形,需要经过三步:
  • 建立数据集。
  • 创建JFreeChart实例,这里可以有两种方法建立,一种是通过xxxPlot获取数据集然后将xxxPlot传递给JFreeChart的构
    造方法,一种是通过ChartFactory通过数据集来创建一个JFreeChart实例。
  • 如果是先获取xxxPlot就不用这一步,如果是通过ChartFactory的话,则需要JFactory实例返回一个xxxPlot。
  • 然后对plot进行相关操作,在这里可以改变图形的显示。

         上面说的是最基本的,还有许多功能将在以后详细描述。

         下面的实例均是Java环境下直接运行的,目的在于专注于如何使用JFreeChart,现在我们来创建一个饼状图:

import java.awt.Font;
import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PiePlot;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
/**
 * A simple demonstration application showing how to create a pie chart using
 * data from a {@link DefaultPieDataset}.
 */
public class PieChartDemo1 extends ApplicationFrame {
       /**
        * Default constructor.
        *
        * @param title     the frame title.
        */
    public PieChartDemo1(String title) {
        super(title);
           setContentPane(createDemoPanel());
       }
       /**
        * Creates a sample dataset.
        *
        * @return A sample dataset.
        */{color:#808080} {color}
    //生成冰砖数据集
    private static PieDataset createDataset() {
           DefaultPieDataset dataset = new DefaultPieDataset();
           dataset.setValue("One", new Double(43.2));
           dataset.setValue("Two", new Double(10.0));
           dataset.setValue("Three", new Double(27.5));
           dataset.setValue("Four", new Double(17.5));
           dataset.setValue("Five", new Double(11.0));
           dataset.setValue("Six", new Double(19.4));
        return dataset;          
       }
      
       /**
        * Creates a chart.
        *
        * @param dataset     the dataset.
        *
        * @return A chart.
        */
    private static JFreeChart createChart(PieDataset dataset) {
          
           JFreeChart chart = ChartFactory.createPieChart(
            "Pie Chart Demo 1",  // 图表标题
               dataset,             // 数据集
            true,               // 是否为一个图例
            true,               //是否使用工具条,工具条就是将鼠标移动到图表不同部分后,出现的一个小提示框
            false               //图片是否有URL连接
           );          
        //生成PiePlot
           PiePlot plot = (PiePlot) chart.getPlot();
           plot.setSectionOutlinesVisible(false);                                      //是否显示分界线
           plot.setLabelFont(new Font("SansSerif", Font.PLAIN, 12));         //Label的字体
           plot.setNoDataMessage("No data available");          //如果没有数据该如何显示
           plot.setCircular(false);                                          //是否为正圆
           plot.setLabelGap(0.02);                                        //这个不太清楚,应该是设置椭圆内部的间距,如果改的很大的话图形会变得很奇怪。。
           plot.setForegroundAlpha(Float.parseFloat("0.4"));    //图片前景的透明度,图片的前景就是这里的饼状图,透明度为0.0~1.0
           plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}: ({1}M, {2})",
                                            NumberFormat.getNumberInstance(),
                                         new DecimalFormat("0.00%")));     //设置图片是否显示出百分比,0是数据,1是数值,2是百分比,
                                                                                           //后面两个参数是设置百分比取值到小数点几位,这里取到小数点后两位,如果百分比要设置为整数,就将这两个参数去掉即可
           plot.setToolTipGenerator(new StandardPieSectionLabelGenerator("{0}: ({1}M, {2})",
                                            NumberFormat.getNumberInstance(),
                                         new DecimalFormat("0.00%")));     //设置工具条是否显示出百分比,其它同上
        return chart;
          
       }
      
       /**
        * Creates a panel for the demo (used by SuperDemo.java).
        *
        * @return A panel.
        */
    public static JPanel createDemoPanel() {
           JFreeChart chart = createChart(createDataset());
        return new ChartPanel(chart);
       }
      
       /**
        * Starting point for the demonstration application.
        *
        * @param args     ignored.
        */
    public static void main(String[] args) {
          
           PieChartDemo1 demo = new PieChartDemo1("Pie Chart Demo 1");
           demo.pack();
           RefineryUtilities.centerFrameOnScreen(demo);
           demo.setVisible(true);
       }

     由于现在自己只将饼状图实现过,为了能更清楚解释其它图的参数以及方法,关于柱状图和线形图就等到之后再讨论。

      最后生成的图表如下,其中的显示出来的34%就是ToolLip的效果:
    

 

你可能感兴趣的:(JFreeChart)