从数据库的JFreeChart条形图数据集(JFreeChart Bar Chart dataset

2019-10-19 06:39发布

我的目标是产生这个条形图使用JFreeChart的。

我想使用MVC数据库获得的JFreeChart数据; 豆,数据访问对象(DAO)和Servlet。 我在做的Servlet代码有问题。 下面的代码是什么我迄今。

帮助将是原汁原味的,并预先感谢您! :)

数据库

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

Answer 1:

如果你的问题是要建立从给出的图表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

关于静态工厂方法的信息是在这里 。



文章来源: JFreeChart Bar Chart dataset from database