2011-02-10 79 views
9

Có thể thay đổi màu của thanh không?Jfreechart: Có thể thay đổi màu của thanh không?

Tôi đã mã hóa một chương trình đơn giản để đếm.

Tôi muốn thực hiện thêm một điều nữa: nếu số đếm lớn hơn 200, hãy sử dụng màu xanh lam để vẽ thanh. Nếu không, sử dụng màu vàng để làm như vậy.

Hiện tại, tất cả màu thanh đều có màu đỏ.

Vì vậy, tôi muốn hỏi, có thể thay đổi màu của thanh không?

Nếu có, ai đó có thể cho tôi một số hướng dẫn để nhận ra không?

Cảm ơn trước!

kèm theo là mã của tôi:

<%@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> 

Trả lời

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

Lấy một handle của các BarRenderer và gọi setSeriesPaint (int loạt, java.awt.Paint sơn) trên đó.

+0

Phương pháp này không thể được sử dụng để thiết lập màu sắc của thanh trong một loạt, đó là những gì OP muốn đạt được. Sử dụng [Câu trả lời của Stobor] (http://stackoverflow.com/a/4953004/720425) thay vì –

5

Phép thuật là getItemPaint(int,int) method của số BarRenderer class.

Một ví dụ là tại http://javabeanz.wordpress.com/2007/07/04/creating-barcharts-with-custom-colours-using-jfreechart/

Những gì bạn đang cố gắng làm sẽ là một cái gì đó như:

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 ; 
    } 
} 

Và sau cuộc gọi của bạn để ChartFactory.createBarChart, bạn làm

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

Đây là câu trả lời đúng. –

1

Hãy xem liên kết này

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]; 
    } 
} 
Các vấn đề liên quan