项目里使用了SSH框架(Struts1)后,如何用Jfreechart生成柱状图和线状图啊?希望高人们能指点小弟一下!最好能给个例子或代码!先谢谢了!急!!!!!

解决方案 »

  1.   

    http://topic.csdn.net/u/20090831/13/c6976093-bca6-4637-994e-c0a8bcbc0855.html1楼的是jfreechart的官方网,上面有很多好的实例
    6楼的超链接是普通的实现实例
      

  2.   

    有例子但都掺在项目里边了,楼主去csdn下载区去搜下吧,一堆一堆的。我就是从那上边找了个随便改的。
    Struts1下和在Servelt下一样,不过跳转的是.do而已,如果Struts2就不同了,需要整合。呵呵。
      

  3.   

    哪位高人有结合struts1的实例啊,就给小弟一份吧!急啊!
      

  4.   

    我做过,不过我的是饼图的,但原理都一样的,贴一下主要的代码吧jsp页面
    //获得统计数据
    List Statistics = (List)request.getAttribute("Statistics");//生成的图片名字
    String fileName=StatisticsChart.generatePieChart(session,new PrintWriter(out),580,250,Statistics);//map映射
    String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + fileName;
    下面是图片显示:
    <img src="<%= graphURL %>"width=580 height=250 border=0 usemap="#<%=fileName%>">
    generatePieChart方法写在action里
    public static String generatePieChart(HttpSession session, PrintWriter pw,int w, int h, List Statistics){
    String filename = null;
    PieDataset dataset = getDataSet(Statistics);
    JFreeChart chart = ChartFactory.createPieChart3D(
    "需求评价统计图", // 图表标题
    dataset, // 数据集
    true,  // 是否显示图例
    true,  // 是否生成工具
    true  // 是否生成URL链接
    );
    chart.setBackgroundPaint(Color.white);
    chart.getTitle().setFont(new Font("黑体",Font.BOLD,16));
    chart.getLegend().setItemFont(new Font("宋体",Font.BOLD,12));
    PiePlot pieplot = (PiePlot) chart.getPlot();
    pieplot.setURLGenerator(new StandardPieURLGenerator("url","url参数",""));
    pieplot.setLabelFont(new Font("宋体", 0, 12));
    pieplot.setNoDataMessage("no data!");
    // 设置开始角度
    pieplot.setStartAngle(150D);
    // 设置方向为顺时针方向
    pieplot.setDirection(Rotation.CLOCKWISE);
    // 设置透明度,0.5F为半透明,1为不透明,0为全透明
    pieplot.setForegroundAlpha(1);
    //pieplot.setExplodePercent("满意", 0.20000000000000001D);
    //显示百分比,但不显示百分比后小数
    //pieplot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0} = {1}({2})"));
    pieplot.setLabelBackgroundPaint(java.awt.Color.white);
    //pieplot.setLegendLabelToolTipGenerator(new StandardPieSectionLabelGenerator("Tooltip for legend item {0}"));//[5]
    //显示百分比,并让百分比保留两位小数
    pieplot.setLabelGenerator(new StandardPieSectionLabelGenerator(
    "{0} ({2})", NumberFormat.getNumberInstance(),
    new DecimalFormat("0.00%")));
    pieplot.setSimpleLabels(true);
    //Sets the interior gap and sends a PlotChangeEvent to all registered listeners.
    pieplot.setInteriorGap(0.0D);//[7]
    //设置扇区边框不可见  
    pieplot.setSectionOutlinesVisible(false); 
    //pieplot.setToolTipGenerator(new StandardPieToolTipGenerator());
    try {
    /*------得到chart的保存路径----*/
    ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
    filename = ServletUtilities.saveChartAsPNG(chart, w, h, info,session);
    /*------使用printWriter将文件写出----*/
    ChartUtilities.writeImageMap(pw, filename, info, false);
    pw.flush();
    } catch (IOException e) {
    e.printStackTrace();
    }
    return filename;
    }
    /**
     * 获取一个饼状图的简单数据集对象
     * @return
     */
    private static PieDataset getDataSet(List Statistics) {
    DefaultPieDataset dataset = new DefaultPieDataset();
    Statistics Statistics = null;
    for(int i = 0; i < Statistics.size(); i++) {
    Statistics = (Statistics)Statistics.get(i);
    dataset.setValue(Statistics.getStatisticsName(), Statistics.getStatisticsNumber());
    }
    return dataset;
    }
      

  5.   

    应该有个方法可以得到流,页面端直接调用这个请求就行。类似于点击获得注册码图片。
    OutputStream ops = response.getOutputStream()
    javax.imageio.ImageIO.write(bi, "jpeg", ops);//bi 为 java.awt.image.BufferedImage
    楼主查查Jfreechart的api有没有获得BufferedImage的。
      

  6.   

    先谢谢以上各楼大侠的帮助。
    不过还有个问题,
    10楼的朋友的帖子里的jsp页面中是否要导入某些JAR包啊?请具体说一下啊!
    另外,把查询结果LIST转成(或存到)jfreechart需要的dataset有没有更好的方法啊?
    11楼的朋友提到的BufferedImage好像还没找到啊?
      

  7.   

    jar包当然要导入的啊,我用的是1.0.13,最新的,你去官网下载下来然后拷到lib下就行了把查询结果LIST转成(或存到)jfreechart需要的dataset有没有更好的方法啊? 
    回答:我没有想到什么好方法,自己就这么做的,你如果想到,也可以给大家分享一下
      

  8.   

    呵呵,如果是java文件,你没引入的话,会有个红叉子,鼠标放在哪里,然后就会提示你引入什么包,或者你在那个红叉子上面,ctrl+shift+m,引入所需要的包,ctrl+shift+o,引入所有需要的包,自己试试吧,
      

  9.   

    继续期待
    把查询结果LIST转成(或存到)jfreechart需要的dataset的好方法!
      

  10.   

    我想有人答复这个问题,很难,我搞map的时候,问了半天,都没人理,最后还是自己搞定!
    希望有人能知道,一起期待!