用jfreechart画柱状图的时候怎么把数字标到柱子上面去呢?
这个问题我都整好久了。没搞定。各位高手帮帮我吧

解决方案 »

  1.   

    这个是我在jfreechart-0.9.16.jar 下好用的代码 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><%@ page language="java" contentType="text/html;charset=gb2312"
          import="java.sql.*"
      import="java.io.*"
      import="java.util.*"
      import="javax.sql.*"
      import="javax.naming.*"
      import="java.text.*"
      import="java.lang.*"   
     import="org.jfree.chart.ChartFactory"
     import="org.jfree.chart.JFreeChart"
     import="org.jfree.chart.plot.PlotOrientation"
     import="org.jfree.data.DefaultCategoryDataset"
     import="org.jfree.chart.servlet.ServletUtilities"
         import="org.jfree.chart.ChartRenderingInfo"
     import="org.jfree.chart.entity.StandardEntityCollection" 

         import = "org.jfree.chart.ChartPanel"      
         import = "org.jfree.chart.StandardLegend"
         import = "org.jfree.chart.axis.NumberAxis"
         import = "org.jfree.chart.plot.CategoryPlot"
         import = "org.jfree.chart.renderer.LineAndShapeRenderer"
         import = "org.jfree.data.CategoryDataset"
      %>
      <%
      
      String stringSqlString,sumSqlString;
      int rowCount;
       // sql="SELECT ALARM_TIME,SITE_ID,INFECTANT_ID,STANDARD_VALUE,ACTUAL_VALUE, MEMO FROM ALARM";
       //stringSqlString="SELECT a.ALARM_TIME, b.SITE_NAME, a.INFECTANT_ID, a.STANDARD_VALUE,a.ACTUAL_VALUE";
      // stringSqlString=stringSqlString+"a.MEMO FROM ALARM a LEFT OUTER JOIN T_DIC_SUBSITE b ON a.SITE_ID = b.SITE_ID WHERE (CONVERT(char(10), a.ALARM_TIME, 120) >= '2006-08-10') AND (CONVERT(char(10), a.ALARM_TIME, 120) <= '2006-08-16')";
       //stringSqlString=stringSqlString+" FROM ALARM a LEFT OUTER JOIN T_DIC_SUBSITE b ON a.SITE_ID = b.SITE_ID WHERE (CONVERT(char(10), a.ALARM_TIME, 120) >= '2006-08-10') AND (CONVERT(char(10), a.ALARM_TIME, 120) <= '2006-08-16')";
        stringSqlString="select id,gzs,cbs,cbzd,yxxs from lxhtest";
         ResultSet rs=query.getResult(stringSqlString);
     ///////////////
     ////////////////////
    // 创建一个 500X375 的图像
    int width=500, height=375;
    int intArray[ ];
    intArray = new int[12];
    int intArray1[ ];
    intArray1 = new int[12];
    String chartTitle = "JFreeChart实例1: 编程类图书周销售量垂直直方图";
          //row keys...
    String bookTitle[] = {"故障数", "超标数", "超标最大值", "有效小时数"};
    //String bookTitle[] = {"故障数"};
    String category[] = {"第1月", "第2月", "第3月", "第4月" ,"第5月", "第6月", "第7月", "第8月","第9月", "第10月", "第11月", "第12月"};
    // column keys...
    //String category[] = {"第1年"};   
     %>
    <html>
    <head>
    <LINK href="Scripts/Global.css" type="text/css" rel="stylesheet">
    <LINK href="Scripts/Web_Catalog.css" type="text/css" rel="stylesheet">
    <title><%=chartTitle%></title>
    </head><body>
    <table align="center" id="tabList" borderColorDark="#EBEFFC" borderColor=#ffffff borderColorLight="#CCD7F7" class="itemList" border="4" cellpadding="3" cellspacing="2" width="75%">
      <tr align="center" valign="middle"> 
        <td>季度</td>
        <td>故障数</td>
        <td>超标数</td>
        <td>超标最大值</td>
        <td>有效小时数</td>
      </tr>
      <%
                 int  k =0;
                while(rs.next()) {
       String jd=rs.getString("id");
       String gzs=rs.getString("gzs");
       String cbs=rs.getString("cbs");
       String cbzd=rs.getString("cbzd");
       String yxxs=rs.getString("yxxs");         
       //////
     //  bookTitle[k]=INFECTANT_ID;
    //   category[k] =curdate;
    // a[k]=(int)ACTUAL_VALUE;
           intArray[k]=Integer.parseInt(yxxs);
       intArray1[k]=Integer.parseInt(cbs);
             %>
      <tr class='tr1' align="center" valign="middle"> 
        <td><%=jd %></td>
        <td><%=gzs%></td>
        <td><%= cbs%></td>
        <td><%=cbzd %></td>  
     <td><%=yxxs %></td>  
      </tr>
      <% k++; } ///////////////////// 
        
      
      %>
      <tr align="center" valign="middle"> 
        <td>合计</td>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
        <td>&nbsp;</td>  
      </tr>
    </table>
    <%
     // 创建数据集
        DefaultCategoryDataset dataset = new DefaultCategoryDataset(); // 往数据集中添加绘制图表所需的数据
    int bookSales;
    int bookSales1;
    //for (int h=0; h< intArray.length; h++)
    //{
      //  bookSales =intArray[h];
        for (int i=0; i < bookTitle.length; i++)
        {
       // out.println("  %%%% "+bookSales+"  %%%% ");
        for (int j=0; j < category.length; j++ )
       {
      //bookSales = 1 + (int)(Math.random() * 100);
      // bookSales =intArray[k];
      bookSales =intArray[j];
     // bookSales =intArray1[j];
    //  out.print("   *** "+bookSales+" "+bookTitle[i]+" "+ category[j]+"   *** ");                     
            dataset.addValue(bookSales, bookTitle[i], category[j]);
     bookSales =intArray1[j];
     dataset.addValue(bookSales, bookTitle[i], category[j]);
    //dataset.addValue(bookSales, category[j],bookTitle[i] );
    //dataset.addValue(bookSales1, bookTitle[i], category[j]);
      }
         }
      // }
    // 创建图表
       JFreeChart chart = ChartFactory.createBarChart
       (
            chartTitle, // 图表标题
            "销售时间:2005年2月", // 坐标标题
            "数据值",                  // 坐标标题
            dataset,                  // 定义绘制数据
            PlotOrientation.VERTICAL, // 直方图的方向
            true,                     // 定义图表是否包含图例
            true,                     // 定义图表是否包含提示
            false                     // 定义图表是否包含URL
        ); ChartRenderingInfo info = 
    new ChartRenderingInfo(new StandardEntityCollection());

         /////////图表上方写数字
          CategoryPlot plot = chart.getCategoryPlot(); 
          CategoryItemRenderer cir=plot.getRenderer(); 
          cir.setItemLabelsVisible(true);
    /////////图表上方写数字





    // 设置图表的格式及文件名
        String fileName = 
    ServletUtilities.saveChartAsPNG(chart, width, height, info, session);

        // 设置图表浏览路径
    String graphURL = 
    request.getContextPath() + "/servlet/DisplayChart?filename=" + fileName; 
    %>
    <P ALIGN="CENTER">
           <img src="<%=graphURL %>" border="1" >
           </P>
           </body>
    </html>
      

  2.   

    <%@ page contentType="text/html;charset=GBK"%> 
    <%@ page import="java.awt.Color, 
                    java.awt.Font, 
                    org.jfree.chart.ChartFactory, 
                    org.jfree.chart.JFreeChart, 
                    org.jfree.chart.plot.PlotOrientation, 
                    org.jfree.chart.servlet.ServletUtilities, 
                    org.jfree.data.CategoryDataset, 
                    org.jfree.data.DatasetUtilities, 
                    org.jfree.chart.plot.CategoryPlot, 
                    org.jfree.chart.axis.CategoryAxis, 
                    org.jfree.chart.axis.ValueAxis, 
                    org.jfree.chart.renderer.BarRenderer3D, 
                    org.jfree.chart.labels.StandardCategoryItemLabelGenerator, 
                    org.jfree.chart.axis.AxisLocation"%> 
    <%   
    ??
      double[][] data = new double[][] {{672, 766, 223, 540, 126},{325, 521, 210, 340, 106},{332, 256, 523, 240, 526}}; 
      String[] rowKeys = {"苹果","梨子","葡萄"}; 
      String[] columnKeys = {"北京","上海","广州","成都","深圳"}; 
      CategoryDataset dataset = DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data);   JFreeChart chart = ChartFactory.createBarChart3D("水果销量图统计", 
                      null, 
                      null, 
                      dataset, 
                      PlotOrientation.VERTICAL, 
                      true,false,false); 
      chart.setBackgroundPaint(Color.WHITE); 
      CategoryPlot plot = chart.getCategoryPlot();   CategoryAxis domainAxis = plot.getDomainAxis(); 
      domainAxis.setVerticalCategoryLabels(false); 
      plot.setDomainAxis(domainAxis);   ValueAxis rangeAxis = plot.getRangeAxis(); 
      //设置最高的一个 Item 与图片顶端的距离 
      rangeAxis.setUpperMargin(0.15); 
      //设置最低的一个 Item 与图片底端的距离 
      rangeAxis.setLowerMargin(0.15); 
      plot.setRangeAxis(rangeAxis);   BarRenderer3D renderer = new BarRenderer3D(); 
      renderer.setBaseOutlinePaint(Color.BLACK); 
      //设置 Wall 的颜色 
      renderer.setWallPaint(Color.gray); 
      //设置每种水果代表的柱的颜色 
      renderer.setSeriesPaint(0, new Color(0, 0, 255)); 
      renderer.setSeriesPaint(1, new Color(0, 100, 255)); 
      renderer.setSeriesPaint(2, Color.GREEN); 
      //设置每个地区所包含的平行柱的之间距离 
      renderer.setItemMargin(0.1); 
      //显示每个柱的数值,并修改该数值的字体属性 
      renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator()); 
      renderer.setItemLabelsVisible(true); 
      plot.setRenderer(renderer);   //设置柱的透明度 
      plot.setForegroundAlpha(0.6f); 
      //设置地区、销量的显示位置 
      plot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT); 
      plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);   String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, null, session); 
      String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename; 
    %> 
    <img src="<%= graphURL %>" width=500 height=300 border=0 usemap="#<%= filename %>"> 
    看看这个 ,没有问题
      

  3.   

    楼主切记:JFreeChart版本不一样,代码会编译不过去了