【问题标题】:Jfreechart piechart generationJfreechart饼图生成
【发布时间】:2014-03-14 08:32:20
【问题描述】:

我正在尝试从现有应用程序生成饼图,但出现错误。 最新的错误是:

efa.util.chart.ChartUtil 中的createPieChart(java.lang.String,org.jfree.data.general.PieDataset,org.jfree.chart.labels.PieSectionLabelGenerator) 不能应用于(java.lang.String, org.jfree.data.general.PieDataset) [javac] 扇区图表 = ChartUtil.createPieChart("",xy); [javac] ^

除此之外,我还需要在函数调用中添加第三个参数,即 PieSectionLabelGenerator labelGenerator。但是,我不知道该怎么做。已阅读 docs/api 但仍不确定。你有什么建议?

我使用的代码是

imports (please see below)
declaration in the code is JFreeChart sectorChart;

the function: 

private void genChart(){
  DefaultPieDataset pieDataset = new DefaultPieDataset();
  pieDataset.setValue("JavaWorld", new Integer(75));
  pieDataset.setValue("Other", new Integer(25));

  PieDataset xy = pieDataset;
  sectorChart = ChartUtil.createPieChart("",xy,);
}

我认为我的导入没有任何问题,对象的声明也没有。如果你想看这些,请告诉我,为了这篇文章的简洁,我把它们排除在外。

我无法让下面的答案专门适用于我的应用。但是我的 ChartUtil.java 文件中有这段代码

public static JFreeChart createPieChart(final String title,
            final PieDataset dataset, PieSectionLabelGenerator labelGenerator) {

        final JFreeChart chart = ChartFactory.createPieChart(title, dataset,
                false, true, true);

        labelGenerator = labelGenerator != null ? labelGenerator
                : new StandardPieSectionLabelGenerator("{2} {0}",
                        NumberFormat.getNumberInstance(),
                        NumberFormat.getPercentInstance());

        PiePlot plot = (PiePlot) chart.getPlot();
        ChartUtil.formatPiePlot(plot);
        plot.setLabelGenerator(labelGenerator);

        PieRenderer renderer = new PieRenderer();
        renderer.setColor((PiePlot) chart.getPlot(), dataset);

        return chart;

    }

我认为我们需要弄清楚如何将 PieSectionLabelGenerator 作为参数传递给函数...

【问题讨论】:

    标签: java charts jfreechart pie-chart


    【解决方案1】:

    关于您的编辑:

    有一个类实现了您需要的接口,StandardPieSectionLabelGenerator 在传递给您的方法时应该允许创建图表。另一种方法是创建一个类来自己实现该方法。我认为这完全取决于您要通过标签实现的目标。

    public class SO {
    public static void main(String[] args){
          DefaultPieDataset pieDataset = new DefaultPieDataset();
          pieDataset.setValue("JavaWorld", new Integer(75));
          pieDataset.setValue("Other", new Integer(25));
    
          JFreeChart chart = SO.createPieChart("Pie", pieDataset, new StandardPieSectionLabelGenerator());
          JFrame frame = new JFrame("Pie");
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          frame.add(new ChartPanel(chart));
          frame.pack();
          RefineryUtilities.centerFrameOnScreen(frame);
          frame.setVisible(true);
    }
    
    public static JFreeChart createPieChart(final String title,
            final PieDataset dataset, PieSectionLabelGenerator labelGenerator) {
    
        final JFreeChart chart = ChartFactory.createPieChart(title, dataset, false, true, true);
        PiePlot plot = (PiePlot) chart.getPlot();
        ChartUtil.formatPiePlot(plot);
        plot.setLabelGenerator(labelGenerator);
        PieRenderer renderer = new PieRenderer();
        renderer.setColor((PiePlot) chart.getPlot(), dataset);
        return chart;
    }
    }
    

    【讨论】:

    • 如果您只为 labelGenerator 传递 null,则该代码(不是 JFreeChart 的一部分)将为您创建标签生成器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多