2009-12-07 6 views
4

Je veux changer la couleur des « morceaux » de tarte dans mon jfreechart PieChart3D, c'est le code qui rend le piechart:Changer la couleur de jfreechart piechart

<% 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); 
%> 

Toute aide est très appréciée.

Répondre

9

La couleur de chaque section est normalement renseignée à partir du DrawingSupplier de l'intrigue. Vous pouvez remplacer les valeurs par défaut, bien que, en appelant

PiePlot.setSectionPaint(Comparable key, Paint paint); 

Avec, cela cependant, vous devrez définir manuellement chaque section. Si vous voulez juste un ensemble de couleurs différent, il semble que vous puissiez implémenter DrawingSupplier.

+1

Comment récupérer 'key' Comparable? Y a-t-il une méthode de l'objet 'plotPie'? J'ai essayé ['plot.getSectionKey (index)'] (http://www.jfree.org/jfreechart/api/javadoc/org/jfree/chart/plot/PiePlot.html#getSectionKey (int)) mais il est protégé... – Manu

1

Vous pouvez utiliser

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

et comme une classe interne:

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]); 
      } 
     } 
    } 
Questions connexes