使用JFreeChart來創建基於web的帶交互功能的PIE圖表(一)

1. JFreeChart建立帶交互功能圖必須有一個ChartRenderingInfo作中介,在建立圖形時設置ChartRenderingInfo的資料
然後在ChartUtilities.writeImageMap方法中按這些資料生成MAP。
2. 如果要定製link 功能,需要一個URLGenerator,默認地提供了StandardPieURLGenerator,它預設了三個參數:
    prefix: 一般是URL基地址;    categoryParameterName:一般是分類名稱; indexParameterName:數據名稱
3. 如果要定製提示,要寫一個ToolTipTagFragmentGenerator,默認用的是StandardToolTipTagFragmentGenerator,是$Key = $Value的形式

以下是基本的示例代碼:

package test;

import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.text.*;
import java.beans.*;
import org.jfree.chart.*;
import org.jfree.data.*;
import org.jfree.chart.demo.*;
import org.jfree.chart.plot.*;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.labels.*;
import java.io.*;
import java.io.*;
import org.jfree.chart.labels.PieToolTipGenerator;
import org.jfree.chart.urls.StandardPieURLGenerator;


public class testPieChart {
    public testPieChart() {
    }
    /**
     * 獲取一個演示用的簡單數據集對象
     * @return
     */
    private static DefaultPieDataset getDataSet() {
        DefaultPieDataset dataset = new DefaultPieDataset();
        dataset.setValue("蘋果",100);
        dataset.setValue("梨子",200);
        dataset.setValue("葡萄",300);
        dataset.setValue("香蕉",400);
        dataset.setValue("荔枝",500);
        return dataset;
    }

    public static void main(String[] args){

        DefaultPieDataset data = getDataSet();
        JFreeChart chart = ChartFactory.createPie3DChart("水果產量圖",  // 圖表標題
        data,
        true, // 是否顯示圖例
        false,
        false
        );

        // then customise it a little...
        chart.setBackgroundPaint(new GradientPaint(0, 0, Color.white, 0, 1000, Color.green));

        PiePlot pie = (PiePlot)chart.getPlot();

        PieSectionLabelGenerator label = pie.getLabelGenerator();
        pie.setLabelFont(new Font("dialog", Font.TRUETYPE_FONT, 8));
        pie.setLabelLinkMargin(0.1);
        pie.setLabelGap(0.1);
//設定顯示格式(名稱加百分比或數值)
//        pie.setPercentFormatString("#,###0.0#%");
//設定百分比顯示格式
        pie.setBackgroundPaint(Color.white);
//        pie.setSectionLabelFont(new Font("黑體", Font.TRUETYPE_FONT, 12));
//設定背景透明度(0-1.0之間)
        pie.setBackgroundAlpha(0.6f);
//設定前景透明度(0-1.0之間)
        pie.setForegroundAlpha(0.90f);


        org.jfree.chart.ChartPanel panel = new ChartPanel(chart);
       
        panel.setPreferredSize(new Dimension(200,100));
        javax.swing.JScrollPane scrollPane = new JScrollPane(panel);
        scrollPane.setPreferredSize(new Dimension(400,150));
        JOptionPane.showMessageDialog(null, scrollPane);
        try {
          ChartRenderingInfo info = new ChartRenderingInfo();
          String url = "./";
          pie.setURLGenerator(new  StandardPieURLGenerator(url,"goods"));
          java.io.OutputStream outStm = new java.io.FileOutputStream(
              "c:/testPie.png");
          ChartUtilities.writeChartAsPNG(outStm,
                                         chart, 800, 450, info);
          outStm.close();
          StringWriter strWriter = new java.io.StringWriter();
          PrintWriter w  =  new java.io.PrintWriter(strWriter);
          ChartUtilities.writeImageMap(w,  "mapName",  info);
          w.close();
          strWriter.close();
          System.out.println("Map=/n" + strWriter.getBuffer());
        }
        catch (IOException ex1) {
          ex1.printStackTrace();
        }

        try {
            Thread.sleep(50000);
        }
        catch (InterruptedException ex) {
        }
        System.exit(0);


    }
}

另外要注意[IMG]中useMap屬性的用法是[IMG src=".." useMap="#mapName"],不要掉了“#”號哦。


下圖是運行結果 (亂碼不要怪我,是這個Blog的原因)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章