ps:
createDataset()是重新初始化一个数据的集合。网上对饼图更多的(基本上都)是生成图片的方式,那当然可以每次将全部流程重新跑一次,不过似乎*****,可不可以针对饼图也刷新数据集?我觉得肯定能实现,只是文档较少,很多人都不知道,只能期盼高人了=====

解决方案 »

  1.   

     jfreechart.getCategoryPlot().setDataset(createDataset());  
    这个重新获得数据集之后,他的图应该还是要重新绘制的吧,这个流程也一样要走一遍的吧~~~
      

  2.   

    好象也应该有对应的方法,因为本身你饼图也是个chart,也可以得到plot,有PLOT当然也可以setDataset了。。我去试下
      

  3.   

    我试过了,是有的
    JFreeChart chart3 = ChartFactory.createPieChart3D( "水果产量图", // 图表标题
    dataset1, true, // 是否显示图例
    false,
    false
    );PiePlot3D plot=(PiePlot3D)chart3.getPlot();
    plot.setDataset(dataset2);
    piechart对应的都有PiePlot3D 和PiePlot
      

  4.   

    import java.awt.Color;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;import org.jfree.chart.ChartFactory;
    import org.jfree.chart.ChartRenderingInfo;
    import org.jfree.chart.ChartUtilities;
    import org.jfree.chart.JFreeChart;
    import org.jfree.chart.axis.AxisLocation;
    import org.jfree.chart.axis.CategoryAxis;
    import org.jfree.chart.axis.NumberAxis;
    import org.jfree.chart.entity.StandardEntityCollection;
    import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
    import org.jfree.chart.plot.CategoryPlot;
    import org.jfree.chart.plot.PiePlot3D;
    import org.jfree.chart.plot.PlotOrientation;
    import org.jfree.chart.plot.XYPlot;
    import org.jfree.chart.renderer.PolarItemRenderer;
    import org.jfree.chart.renderer.category.BarRenderer;
    import org.jfree.chart.renderer.category.BarRenderer3D;
    import org.jfree.chart.renderer.category.LineAndShapeRenderer;
    import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
    import org.jfree.chart.servlet.ServletUtilities;
    import org.jfree.chart.urls.CategoryURLGenerator;
    import org.jfree.chart.urls.StandardCategoryURLGenerator;
    import org.jfree.data.category.CategoryDataset;
    import org.jfree.data.category.DefaultCategoryDataset;
    import org.jfree.data.general.DatasetChangeEvent;
    import org.jfree.data.general.DefaultPieDataset;
    import org.jfree.data.xy.XYDataset;
    import org.jfree.data.xy.XYSeries;
    import org.jfree.data.xy.XYSeriesCollection;public class TestRediantu {

    public static void main(String[] args) throws IOException
    {
    DefaultPieDataset dataset1 = new DefaultPieDataset();
      dataset1.setValue("苹果",100);
     dataset1.setValue("梨子",200);
    dataset1.setValue("葡萄",300);
     dataset1.setValue("香蕉",400);
       dataset1.setValue("荔枝",500);   JFreeChart chart3 = ChartFactory.createPieChart3D( "水果产量图", // 图表标题
    dataset1, true, // 是否显示图例
    false,
    false
    );

    FileOutputStream fos_jpg = null; try {
    fos_jpg = new FileOutputStream("D:\\fruit.jpg");
    } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
     try {
    ChartUtilities.writeChartAsJPEG(fos_jpg, chart3, 400, 500);
    fos_jpg.close();
    } catch (IOException e) {

    e.printStackTrace();
    }

    FileOutputStream fos_jpg1=  new FileOutputStream("D:\\fruit1.jpg");
    DefaultPieDataset dataset2 = new DefaultPieDataset();
    dataset1.setValue("苹果1",100);
    dataset1.setValue("梨子1",200);
    dataset1.setValue("葡萄1",300);
    dataset1.setValue("香蕉1",400);
    dataset1.setValue("荔枝1",500);
     PiePlot3D plot=(PiePlot3D)chart3.getPlot();
    // plot.setDataset(dataset2);
     plot.datasetChanged(new DatasetChangeEvent(plot, dataset2));
      
     
      ChartUtilities.writeChartAsJPEG(fos_jpg1, chart3, 400, 500);

    }


    }以上代码你可以做参考,我 plot.datasetChanged(new DatasetChangeEvent(plot, dataset2));
    这样后,两个dataset都生成到图上了。。现在只要再把第一个图的dataset去掉就应该对了
      

  5.   

    不好意思上边发错了,我疏忽了DefaultPieDataset dataset2 = new DefaultPieDataset();
            dataset1.setValue("苹果1",100);
            dataset1.setValue("梨子1",200);
            dataset1.setValue("葡萄1",300);
            dataset1.setValue("香蕉1",400);
            dataset1.setValue("荔枝1",500);
    没有给dataset2 加东西,加到dataset1上去了。。现在把代码改一下,完全实现了你要的效果package com.testchart;import java.awt.Color;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;import org.jfree.chart.ChartFactory;
    import org.jfree.chart.ChartRenderingInfo;
    import org.jfree.chart.ChartUtilities;
    import org.jfree.chart.JFreeChart;
    import org.jfree.chart.axis.AxisLocation;
    import org.jfree.chart.axis.CategoryAxis;
    import org.jfree.chart.axis.NumberAxis;
    import org.jfree.chart.entity.StandardEntityCollection;
    import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
    import org.jfree.chart.plot.CategoryPlot;
    import org.jfree.chart.plot.PiePlot3D;
    import org.jfree.chart.plot.PlotOrientation;
    import org.jfree.chart.plot.XYPlot;
    import org.jfree.chart.renderer.PolarItemRenderer;
    import org.jfree.chart.renderer.category.BarRenderer;
    import org.jfree.chart.renderer.category.BarRenderer3D;
    import org.jfree.chart.renderer.category.LineAndShapeRenderer;
    import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
    import org.jfree.chart.servlet.ServletUtilities;
    import org.jfree.chart.urls.CategoryURLGenerator;
    import org.jfree.chart.urls.StandardCategoryURLGenerator;
    import org.jfree.data.category.CategoryDataset;
    import org.jfree.data.category.DefaultCategoryDataset;
    import org.jfree.data.general.DatasetChangeEvent;
    import org.jfree.data.general.DefaultPieDataset;
    import org.jfree.data.xy.XYDataset;
    import org.jfree.data.xy.XYSeries;
    import org.jfree.data.xy.XYSeriesCollection;public class TestRediantu {

    public static void main(String[] args) throws IOException
    {
    DefaultPieDataset dataset1 = new DefaultPieDataset();
      dataset1.setValue("苹果",100);
     dataset1.setValue("梨子",200);
    dataset1.setValue("葡萄",300);
     dataset1.setValue("香蕉",400);
       dataset1.setValue("荔枝",500);   JFreeChart chart3 = ChartFactory.createPieChart3D( "水果产量图", // 图表标题
    dataset1, true, // 是否显示图例
    false,
    false
    );

    FileOutputStream fos_jpg = null; try {
    fos_jpg = new FileOutputStream("D:\\fruit.jpg");
    } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
     try {
    ChartUtilities.writeChartAsJPEG(fos_jpg, chart3, 400, 500);
    fos_jpg.close();
    } catch (IOException e) {

    e.printStackTrace();
    }

    FileOutputStream fos_jpg1=  new FileOutputStream("D:\\fruit1.jpg");
    DefaultPieDataset dataset2 = new DefaultPieDataset();
    dataset2.setValue("苹果1",100);
    dataset2.setValue("梨子1",200);
    dataset2.setValue("葡萄1",300);
    dataset2.setValue("香蕉1",400);
    dataset2.setValue("荔枝1",500);

     PiePlot3D plot=(PiePlot3D)chart3.getPlot();
     plot.setDataset(dataset2);
    // plot.datasetChanged(new DatasetChangeEvent(plot, dataset2));
     
     
      ChartUtilities.writeChartAsJPEG(fos_jpg1, chart3, 400, 500);

    }


    }为了比较方便,我分别在D盘生成了2张图片,供你比较,我用的版本为1.0
      

  6.   

    WEB方式我就不说了,这个你参考一下,改成WEB方式应该不是难事,LZ,记得给分哈
      

  7.   

    To  ee4456 :  多谢!多谢!
      你的方法我去试试,不过应该不会有问题  呵呵  当时我对JFreeChart了解的不多,网上资料也千篇一律,情况不一样,以为也必须像柱图那样找到setDataset()的方法,不过失败了(看来还是有的,只是我们没找到),最后想到只修改某一Key值的Value,结果也是可以的:
             Plot plot = jfreechart.getPlot();
         PiePlot pieplot = (PiePlot)plot;
         PieDataset categorydataset = pieplot.getDataset();
         DefaultPieDataset defaultcategorydataset = (DefaultPieDataset)categorydataset;
            for (int i = 0; i < 5; i++) {
                final double value = 100.0 * Math.random();
                defaultcategorydataset.setValue("Section " + i, value);
            }
    。应该是修改单个Key的value后,也激发了JFreeChart的监听事件。
      你这个方法是我当初要找的方法,等待中竟也找到了另一种实现方法,看来有时是思路给局限了,再次多谢ee4456!!  废话不说了,结贴给分 呵呵