使用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的原因)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值