2009-12-07 63 views
4

我想改變我的JFreeChart PieChart3D餡餅「塊」的顏色的顏色,這是使餅圖代碼:更改jfreechart的餅圖

<% response.setContentType("image/png"); %><%@page import="org.jfree.data.general.*"%><%@page import="org.jfree.chart.*"%><%@page import="org.jfree.chart.plot.*"%><%@page import="java.awt.Color" %><% 

     DefaultPieDataset ds = (DefaultPieDataset)session.getAttribute("usagePieOutputDataset"); 

    JFreeChart chart = ChartFactory.createPieChart3D 
    (
    null, // Title 
    ds, // Dataset 
    false, // Show legend 
    false, // Use tooltips 
    false // Configure chart to generate URLs? 
); 

    chart.setBackgroundPaint(Color.WHITE); 
    chart.setBorderVisible(false); 

    PiePlot3D plot = (PiePlot3D)chart.getPlot(); 
    plot.setDepthFactor(0.0); 
    plot.setLabelGenerator(null); //null means no labels 

    plot.setLabelOutlinePaint(Color.LIGHT_GRAY); 
    plot.setLabelFont(new java.awt.Font("Arial", java.awt.Font.BOLD, 10)); 


    ChartUtilities.writeChartAsPNG(response.getOutputStream(), chart, 150, 144); 
%> 

任何幫助,高度讚賞。

回答

9

每個部分的顏色通常從繪圖的DrawingSupplier中填充。儘管如此,您可以通過調用

PiePlot.setSectionPaint(Comparable key, Paint paint); 

使用,但是,您需要手動設置每個部分。如果你只是想要一組不同的顏色,看起來你可以實現DrawingSupplier。

+1

如何檢索'可比key'?是否有'plotPie'對象的方法?我試過['plot.getSectionKey(index)'](http://www.jfree.org/jfreechart/api/javadoc/org/jfree/chart/plot/PiePlot.html#getSectionKey(int)),但它是保護... – Manu 2012-10-16 09:10:50

1

您可以使用

Color[] colors = {Color.green, Color.red, Color.yellow .. /* size of data set */}; 
PieRenderer renderer = new PieRenderer(colors); 
renderer.setColor(plot, ds); 

,並作爲一個內部類:

static class PieRenderer 
    { 
     private Color[] color; 

     public PieRenderer(Color[] color) 
     { 
      this.color = color; 
     }   

     public void setColor(PiePlot plot, DefaultPieDataset dataset) 
     { 
      List <Comparable> keys = dataset.getKeys(); 
      int aInt; 

      for (int i = 0; i < keys.size(); i++) 
      { 
       aInt = i % this.color.length; 
       plot.setSectionPaint(keys.get(i), this.color[aInt]); 
      } 
     } 
    }