为什么setBaseSectionPaint不起作用?

时间:2017-05-29 20:15:19

标签: java jfreechart

我有一张饼图。我需要填充所有部分相同的颜色。在jfreechart指南中,我找到了方法setBaseSectionPaint,但它没有用。我在循环中使用了方法setSectionPaint,但它不对(超出程序代码)。为什么setBaseSectionPaint不起作用?

private  JFreeChart createPieChart(PieDataset piedataset){
    JFreeChart jfreechart = ChartFactory.createPieChart("Select the desired dictionary:", piedataset,true, true, false);

    PiePlot pieplot = (PiePlot) jfreechart.getPlot();


    for (int i=0;i<piedataset.getItemCount();i++){  //excess program code
        pieplot.setSectionPaint(piedataset.getKey(i),new Color(54, 95, 196));
    }

    pieplot.setBaseSectionPaint(new Color(54, 95, 196)); //doesn't work
    return jfreechart;
}

1 个答案:

答案 0 :(得分:2)

PiePlot方法drawItem()等调用lookupSectionPaint(),解释了所使用的算法:

  • 如果getSectionPaint()非空,则返回;
  • 如果getSectionPaint(int)为非null,则返回它;
  • 如果getSectionPaint(int)为空但autoPopulatetrue,则尝试从绘图供应商处获取新的颜料(Plot.getDrawingSupplier());
  • 如果其他所有方法都失败,请返回getBaseSectionPaint()

相反,尝试这种方法,省略对org.jfree.chart.demo.PieChartDemo1的调用后使用setSectionPaint()进行说明:

//plot.setSectionPaint(…);
plot.setAutoPopulateSectionPaint(false);
plot.setBaseSectionPaint(Color.blue);

image