2009-12-07 4 views
4

Я хочу изменить цвет «кусков» пирога в моем JFreeChart PieChart3D, это код, который делает PieChart:Изменение цвета 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); 
%> 

Любая помощь высоко ценится.

ответ

9

Цвет для каждой секции обычно заполняется чертежом DrawingSupplier. Вы можете изменить настройки по умолчанию, хотя, по телефону

PiePlot.setSectionPaint(Comparable key, Paint paint); 

С, это, хотя, вы должны будете установить каждый раздел вручную. Если вам нужен только другой набор цветов, похоже, что вы можете реализовать DrawingSupplier.

+1

Как получить 'Comparable key'? Есть ли метод из объекта plotPie? Я попробовал ['plot.getSectionKey (index)'] (http://www.jfree.org/jfreechart/api/javadoc/org/jfree/chart/plot/PiePlot.html#getSectionKey (int)), но это защищенный ... – Manu

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]); 
      } 
     } 
    } 
Смежные вопросы