2014-01-29 43 views
0

我的目標是使用JFreeChart生成this Bar Chart來自數據庫的JFreeChart條形圖數據集

我想從數據庫中使用MVC獲取JFreeChart數據; Bean,數據訪問對象(DAO)和Servlet。我在Servlet中執行代碼時遇到問題。下面的代碼是我到目前爲止。

幫助將appeciate,並提前感謝您! :)

數據庫

ID |收入


R1 | 999
M3 | 832
G7 | 318

public class Revenue 
{ 
    private String id; 
    private Integer revenue; 

    //getters and setters 
} 

DAO

public ArrayList<Revenue> getAllRevenueList() 
{ 
    try 
    { 
     //driver 
     //connection code 

    String sql = "SELECT id,revenue FROM revenue_table"; 
    Statement stmt = con.createStatemtnt(); 
    ResultSet rs = stmt.executeQuery(sql); 

    ArrayList<Revenue> revenueList = new ArrayList<Revenue>(); 
    while(rs.next) 
    { 
     Revenue r = new Revenue(); 
     r.setId(rs.getString("id")); 
     r.setRevenue(Integer.parseInt(rs.getString("revenue"))); 
     revenueList.add(r); //add object to list 
    } 

    return revenueList; 
    } 
    catch(Exception e) 
    { 
    e.printStackTrace(); 
    return null; 
    } 
} 

的Servlet

protected void doGet(HttpServletRequest request, 
      HttpServletResponse response) throws ServletException, IOException { 

     response.setContentType("image/png"); 

     OutputStream outputStream = response.getOutputStream(); 
JFreeChart chart = getRevenueChart(); 

int width = 1100; 
      int height = 350; 
      ChartUtilities.writeChartAsPNG(outputStream, chart, width, height); 


} 

public JFreeChart getRevenueChart() { 

//Cannot instantiate the type CategoryDataset 

     CategoryDataset dataset = new CategoryDataset(); 

     ArrayList<Bean> revenueList = DAO.getAllRevenueList(); 

     if (revenueList != null && !revenueList.isEmpty()) { 
      for (Bean r : revenueList) { 
       dataset.setValue(r.getRevenue(), r.getID()); 

      } 
     } 

     JFreeChart chart = ChartFactory.createBarChart3D("Graph Title", 
       "ID", 
       "Revenue", 
       dataset, 
       PlotOrientation.VERTICAL, 
       false, 
       false, 
       false); 

     CategoryPlot plot = chart.getCategoryPlot(); 
     CategoryAxis axis = plot.getDomainAxis(); 

     CategoryItemRenderer renderer = plot.getRenderer(); 
     BarRenderer r = (BarRenderer) renderer; 
     r.setMaximumBarWidth(0.95); 

     return chart; 
    } 
+0

因此,您在創建圖表時遇到問題?你有什麼嘗試?或者什麼都應該在Servlet中完成?你有什麼嘗試? – Erlik

回答

1

如果您的問題呈丁o從給定的List<Revenue>創建圖表,然後嘗試如下所示。

DefaultCategoryDataset dataset = new DefaultCategoryDataset(); 
for (Revenue revenue : revenueList) { 
    // the middle parameter is for naming the value, can be empty if you have just one 
    dataset.addValue(revenue.getRevenue(), "", revenue.getId()); 
} 

JFreeChart chart = ChartFactory.createBarChart(
    "", 
    "", 
    "Revenues", 
    dataset, 
    PlotOrientation.VERTICAL, 
    true, 
    false, 
    false 
);    // or whatever parameters you need 

有關靜態工廠方法的信息是here

+0

工程就像一個魅力!謝謝! :) – newbieinjavaversion2