2011-02-10 151 views
9

¿Es posible cambiar el color de la barra?Jfreechart: ¿Es posible cambiar el color de la barra?

He codificado un programa simple para contar.

Quiero implementar una cosa más: si el número de conteo es mayor que 200, use el color azul para dibujar la barra. Si no, use el color amarillo para hacerlo.

Actualmente, todo el color de la barra está en rojo.

Entonces, me gustaría preguntar, ¿es posible cambiar el color de la barra?

En caso afirmativo, ¿alguien me puede dar alguna guía para realizar?

¡Gracias de antemano!

adjunta es mi codificación:

<%@page contentType="text/html"%> 
<%@page import="java.io.*" %> 
<%@page import="java.sql.*" %> 
<%@page import="org.jfree.data.category.*" %> 
<%@page import="org.jfree.chart.*" %> 
<%@page import="org.jfree.chart.plot.*" %> 

<html> 
<body> 

<% 
     DefaultCategoryDataset dataset = new DefaultCategoryDataset(); 
     try 
     { 

      Class.forName("com.mysql.jdbc.Driver"); 
      java.sql.Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/delivery","root","root"); 
      Statement sta = con.createStatement(); 
      ResultSet res = sta.executeQuery("SELECT inventory, subject from statistics"); 
      int count; 
      String subject; 

      while (res.next()) 
      { 
       count = res.getInt("inventory"); 
       subject = res.getString("subject"); 
       dataset.addValue(count,"enrollment count statistics", subject); 
      } 
     } 
     catch (Exception e) { 
      System.err.println(e.getMessage()); 
     } 

     JFreeChart bar = ChartFactory.createBarChart("Enrollment Chart", "subject","Count",dataset, PlotOrientation.HORIZONTAL,true, false, false); 
     //BarRenderer renderer = (BarRenderer) bar.getCategoryPlot().getRenderer(); 

     String fileName = "/bar.png"; 
     String file = application.getRealPath("/") + fileName; 

     try 
     { 
      FileOutputStream fileOut = new FileOutputStream(file); 
      ChartUtilities.writeChartAsPNG(fileOut, bar, 300, 300); 
     } 
     catch (IOException e) 
     { 
      out.print(e); 
     } 


%> 
<img src="/delivery/bar.png" alt="subject Bar Chart" /> 
</body> 
</html> 

Respuesta

5
Plot plot = bar.getPlot(); 
BarRenderer barRenderer = (BarRenderer)plot.getRenderer(); 
barRenderer.setSeriesPaint(0, Color.gray); 

obtener un identificador para el BarRenderer y llamar setSeriesPaint (int serie, pintura java.awt.Paint) en él.

+0

Este método no se puede utilizar para establecer el color de las barras dentro de una serie, que es lo que quiere lograr OP. Utilice [Respuesta de Stobor] (http://stackoverflow.com/a/4953004/720425) en su lugar –

5

La magia es getItemPaint(int,int) method del BarRenderer class.

Un ejemplo está en http://javabeanz.wordpress.com/2007/07/04/creating-barcharts-with-custom-colours-using-jfreechart/

Lo que estamos tratando de hacer sería algo así como:

class CustomRenderer extends BarRenderer 
{ 

    public CustomRenderer() 
    { 
    } 

    public Paint getItemPaint(final int row, final int column) 
    { 
     // returns color depending on y coordinate. 
     return (row > 200) ? Color.blue : Color.yellow ; 
    } 
} 

Y luego, después de su llamada a ChartFactory.createBarChart, lo hace

final CategoryPlot plot = chart.getCategoryPlot(); 
CategoryItemRenderer renderer = new CustomRenderer(); 
plot.setRenderer(renderer); 
+0

Esta es la respuesta correcta. –

1

Echa un vistazo a este enlace

JFreeChart: Bar Chart Demo 3: different colors within a series

/** 
* A custom renderer that returns a different color for each item in a single series. 
*/ 
class CustomRenderer extends BarRenderer { 

    /** The colors. */ 
    private Paint[] colors; 

    /** 
    * Creates a new renderer. 
    * 
    * @param colors the colors. 
    */ 
    public CustomRenderer(final Paint[] colors) { 
     this.colors = colors; 
    } 

    /** 
    * Returns the paint for an item. Overrides the default behaviour inherited from 
    * AbstractSeriesRenderer. 
    * 
    * @param row the series. 
    * @param column the category. 
    * 
    * @return The item color. 
    */ 
    public Paint getItemPaint(final int row, final int column) { 
     return this.colors[column % this.colors.length]; 
    } 
} 
Cuestiones relacionadas