N个地方贴问题了,就是没人答.小弟我要实现在一个jsp页面上画出两个曲线图,每个图都是以时间为x轴,多纵轴.并且要在鼠标指向各个数据点的时候显示其坐标.
写了一个方法
  public void drawMoreZheXian(ArrayList TimeSeriesLIst, ArrayList showList,
                              ArrayList colorList, String[] groupArr,
                              String[] titleArr, String zmStr,
                              JspWriter out, int width, int height,
                              String[] colorArr, int bgcolor) {
    CombinedDomainXYPlot plot = new CombinedDomainXYPlot(new DateAxis(zmStr));
    if (groupArr != null && groupArr.length >= 1) {      for (int i = 0; i < groupArr.length; i++) {
   //String[] numArr = groupArr[i].split(",");
//循环把各组值放到 collection中
TimeSeriesCollection  dataset = new TimeSeriesCollection();
        dataset.addSeries( (TimeSeries) TimeSeriesLIst.get(i));//生产工具提示信息的ArrayList
        ArrayList[] tooltips = new ArrayList[showList.size()];
        for (int k = 0; k < showList.size(); k++) {
          tooltips[k] = getCurveSeries( (String[]) showList.get(k));
        }        ////////////////////////井数
        NumberAxis rangeAxis1 = new NumberAxis(titleArr[i]);        CustomXYToolTipGenerator ttg1 = new CustomXYToolTipGenerator();
        //加入各条曲线的工具提示条
          ttg1.addToolTipSeries(tooltips[i]);        //生成曲线的透视层
        StandardXYItemRenderer renderer1 = new StandardXYItemRenderer(
            StandardXYItemRenderer.SHAPES_AND_LINES,
            ttg1, null);
        rangeAxis1.setAutoRangeIncludesZero(false);
        rangeAxis1.setAutoRangeStickyZero(false);
        //设置小数位数
        rangeAxis1.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
        XYPlot subplot1 = new XYPlot(dataset, null, rangeAxis1, renderer1);
        subplot1.setBackgroundPaint(new GradientPaint(0, 100,
            new Color(0xccccff), 130, 240, new Color(0xeffcd0), true));
        plot.setDomainGridlinePaint(Color.white);
        plot.setRangeGridlinePaint(Color.white);
        plot.setAxisOffset(new RectangleInsets(5.0, 5.0, 5.0, 5.0));
        plot.add(subplot1, 1);
        plot.setBackgroundPaint(new Color(bgcolor));
        if (colorList != null && colorList.size() > 0) {
          renderer1.setSeriesPaint(0, (Color) colorList.get(i));
        }        rangeAxis1.setAutoRange(true);      JFreeChart chart = new JFreeChart("",
                                          JFreeChart.DEFAULT_TITLE_FONT, plot, false);
        chart.setBackgroundPaint(new Color(bgcolor));        plot.setDomainCrosshairVisible(false);
        plot.setRangeCrosshairVisible(false);        DateAxis axis = (DateAxis) plot.getDomainAxis();
        axis.setTickUnit(new DateTickUnit(DateTickUnit.DAY, 1,
                                          new SimpleDateFormat("MM-dd")));
        XYItemRenderer xyitemrenderer = plot.getRenderer();
        if (xyitemrenderer instanceof XYLineAndShapeRenderer) {
          XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer)
              xyitemrenderer;
          xylineandshaperenderer.setBaseShapesVisible(true);
          xylineandshaperenderer.setBaseShapesFilled(true);
        }
        FileOutputStream fos_jpg = null;
        String[] imgUrl = null;
        ChartRenderingInfo info = null;
        try {
          imgUrl = ImgScgz.getImgUrl();
          fos_jpg = new FileOutputStream(imgUrl[0]);
          info = new ChartRenderingInfo();
          ChartUtilities.writeChartAsJPEG(fos_jpg, 100, chart, width, height, info); //图形的大小        }
        catch (Exception e) {
        e.printStackTrace();
         }
         finally {
           try {
             fos_jpg.close();
           }
           catch (Exception e) {}
         }
         try {
           out.print("<img src=" + imgUrl[1] + " border=0 usemap=#mapName>");
           out.print(ChartUtilities.getImageMap("mapName", info));
         }
         catch (Exception e) {}   }
}方法getCurveSeries内容
  public ArrayList getCurveSeries(String[] str) {
    //所对应的工具提示
    ArrayList toolTips = new ArrayList();
    for (int i = 0; i < str.length; i++) {
      toolTips.add(str[i]);
    }
    return toolTips;
  }然后在jsp中调用两次这个方法,只是传递的参数不一致,但是只能显示前一个图的数据点,后一个死活出不来.貌似还是用的前一个的tooltips,因为有时两边数据一致的时候就能显示.日志里打出来的数据是又是对的.总之我是晕了,不知道怎么解决!
请教高手是怎么回事?

解决方案 »

  1.   

    用debug试试,可能很多人都不熟悉
      

  2.   

    不应该调用两次,应该是一副图,jfreechart好像有做组合图的方法
      

  3.   

    感谢各位关注!
    to:  1111111
    我的意思是:我在一个jsp页面中,要显示两付图,只是两个图关注的数据不相同,但是都是一种类型的图.所以调用两次.
    其实换个例子到无所谓,但是我想知道为什么不行.
      

  4.   

    jsp也贴出来吧
    <%@ include file="/WEB-INF/jsp/top.jsp" %>
    <%@ page import="java.util.*"%>
    <%@ page import="com.sc.ysj.model.*"%>
    <%@ page import="com.sc.subysj.model.*"%>
    <%@ page import="com.sc.subysj.session.*"%>
    <%@ page import="com.sc.ysj.newaction.*"%>
    <%@ page import="com.sh.util.*"%>
    <%@ page import="com.sc.util.*"%>
    <%@ page import="java.lang.*"%>
    <%@ page import="com.sc.sys.session.*"%>
    <%@ page import="com.sc.ysj.session.*"%>
    <%@ page import="com.sh.control.*"%>
    <%@ page import="com.sh.acl.*"%>
    <%@ page import="org.jfree.data.*"%>
    <%@ page import="org.jfree.chart.*"%>
    <%@ page import="org.jfree.chart.plot.*"%>
    <%@ page import="org.jfree.data.time.*"%>
    <%@ page import="java.awt.Color"%>
    <%@ page import="org.jfree.chart.renderer.*"%>
    <%@ page import="org.jfree.chart.axis.*"%>
    <%@ page import="org.jfree.data.*"%>
    <%@ page import="org.jfree.chart.*"%>
    <%@ page import="org.jfree.chart.plot.*"%>
    <%@ page import="org.jfree.data.time.*"%>
    <%@ page import="java.awt.Color"%>
    <%@ page import="org.apache.log4j.*"%>
    <%@ page import="org.jfree.chart.axis.*"%>
    <%@ page import="java.text.SimpleDateFormat"%>
    <%@ page import="org.jfree.chart.rendereAboutTimer.xy.*%>
    <%@ page import="org.jfree.chart.annotations.*"%>
    <%@ page import="org.jfree.chart.renderer.xy.XYLineAndShapeRenderer"%>
    <%@ page import="org.jfree.data.category.CategoryDataset"%>
    <%@ page import="org.jfree.data.category.DefaultCategoryDataset"%>
    <%@ page import="org.jfree.data.xy.*"%>
    <%@ page import="org.jfree.chart.labels.*"%>
    <%@ page import="org.jfree.ui.*"%>
    <%@ page import="org.jfree.chart.title.*"%>
    <%@ page import="org.jfree.chart.block.*"%>
    <%@ page import="java.sql.Timestamp"%>
    <%@ page import="java.awt.*"%>
    <%@ page import="com.sc.csxg.model.*"%><table>
      <tr>
        <td>
        <table>
          <tr>
            <td class="td2">措施前期效果情况图表</td>
          </tr>
          <tr>
            <td>
        <%
     java.util.List csqqList = ( java.util.List)request.getAttribute("csqqList");
     if(csqqList != null) {
     TimeSeries s1 = new TimeSeries("日产液量", Day.class);//日产液量
     TimeSeries s2 = new TimeSeries("日产油量", Day.class);//日产油量
     TimeSeries s3 = new TimeSeries("综合含水", Day.class);//综合含水
     TimeSeries s4 = new TimeSeries("动液面", Day.class);//动液面
     String[] str1 = new String[csqqList.size()];//日产液量
     String[] str2 = new String[csqqList.size()];//日产油量
     String[] str3 = new String[csqqList.size()];//综合含水
     String[] str4 = new String[csqqList.size()];//动液面
      //add by lcx 2005-06-16 [start]
    GregorianCalendar g = new GregorianCalendar();
        for(int j =0 ; j<csqqList.size();j++){
          Map showMap = (Map)csqqList.get(j);
          if(showMap != null){
            g.setTimeInMillis(CmUtil.getTimeStamp((String)showMap.get("rq")).getTime());
            Day day = new Day(g.get(Calendar.DAY_OF_MONTH),g.get(Calendar.MONTH)+1,g.get(Calendar.YEAR));
             //日产液量
             s1.add(day,ToolsUtil.stringToDouble((String)showMap.get("rcy")));
             str1[j]="日产液量:"+(String)showMap.get("rcy")+"吨";
             //日产油量
             s2.add(day,ToolsUtil.stringToDouble((String)showMap.get("rcyou")));
             str2[j]="日产油量:"+(String)showMap.get("rcyou")+"吨";
             //综合含水
             s3.add(day,ToolsUtil.stringToDouble((String)showMap.get("hs")));
             str3[j]="综合含水:"+(String)showMap.get("hs")+"%";
             //动液面
             s4.add(day,ToolsUtil.stringToDouble((String)showMap.get("dym")));
             str4[j]="动液面:"+(String)showMap.get("dym")+"米";
             g.add(Calendar.DAY_OF_MONTH,1);
             }
          }
        //add by lcx 2005-06-16 [end]
     //生成曲线的数据
     ArrayList timeSeriseList = new ArrayList();
     timeSeriseList.add(s1);
     timeSeriseList.add(s2);
     timeSeriseList.add(s3);
     timeSeriseList.add(s4);
     //提示信息
     ArrayList showList = new ArrayList();
     showList.add(str1);
     showList.add(str2);
     showList.add(str3);
     showList.add(str4);
     //分组
     String[] groupArr = new String[4];
     groupArr[0] = "0";
     groupArr[1] = "1";
     groupArr[2] = "2";
     groupArr[3] = "3";
    //标题
    String[] titleArr = new String[4];
    titleArr[0] = "日产液量(吨)";
    titleArr[1] = "日产油量(吨)";
    titleArr[2] = "综合含水(%)";
    titleArr[3] = "动液面(米)";
    //设置线条颜色
     ArrayList colorList = new ArrayList();
     new AboutPic().drawMoreZheXian(timeSeriseList,showList,colorList,groupArr,titleArr,request.getAttribute("jh")+"井措施前生产曲线",out,450,300,null,0xE9F3EC);
     }
    %>
     </td>
     </tr>
     </table>
        </td>
        <td>
              <table>
          <tr>
            <td class="td2">措施初期效果情况图表</td>
          </tr>
          <tr>
            <td>
        <%
     java.util.List cscqList = ( java.util.List)request.getAttribute("cscqList");
     if(cscqList != null) {
     TimeSeries s1 = new TimeSeries("日产液量", Day.class);//日产液量
     TimeSeries s2 = new TimeSeries("日产油量", Day.class);//日产油量
     TimeSeries s3 = new TimeSeries("综合含水", Day.class);//综合含水
     TimeSeries s4 = new TimeSeries("动液面", Day.class);//动液面
     String[] str1 = new String[cscqList.size()];//日产液量
     String[] str2 = new String[cscqList.size()];//日产油量
     String[] str3 = new String[cscqList.size()];//综合含水
     String[] str4 = new String[cscqList.size()];//动液面
      //add by lcx 2005-06-16 [start]
    GregorianCalendar g = new GregorianCalendar();
        for(int k =0 ; k<cscqList.size();k++){
          Map showMap = (Map)cscqList.get(k);
          if(showMap != null){
            g.setTimeInMillis(CmUtil.getTimeStamp((String)showMap.get("rq")).getTime());
            Day day = new Day(g.get(Calendar.DAY_OF_MONTH),g.get(Calendar.MONTH)+1,g.get(Calendar.YEAR));
             //日产液量
             s1.add(day,ToolsUtil.stringToDouble((String)showMap.get("rcy")));
             str1[k]="日产液量:"+(String)showMap.get("rcy")+"吨";
             //日产油量
             s2.add(day,ToolsUtil.stringToDouble((String)showMap.get("rcyou")));
             str2[k]="日产油量:"+(String)showMap.get("rcyou")+"吨";
             //综合含水
             s3.add(day,ToolsUtil.stringToDouble((String)showMap.get("hs")));
             str3[k]="综合含水:"+(String)showMap.get("hs")+"%";
             //动液面
             s4.add(day,ToolsUtil.stringToDouble((String)showMap.get("dym")));
             str4[k]="动液面:"+(String)showMap.get("dym")+"米";
             g.add(Calendar.DAY_OF_MONTH,1);
             }
          }
        //add by lcx 2005-06-16 [end]
     //生成曲线的数据
     ArrayList timeSeriseList = new ArrayList();
     timeSeriseList.add(s1);
     timeSeriseList.add(s2);
     timeSeriseList.add(s3);
     timeSeriseList.add(s4);
     //提示信息
     ArrayList showList = new ArrayList();
     showList.add(str1);
     showList.add(str2);
     showList.add(str3);
     showList.add(str4);
     //分组
     String[] groupArr1 = new String[4];
     groupArr1[0] = "0";
     groupArr1[1] = "1";
     groupArr1[2] = "2";
     groupArr1[3] = "3";
    //标题
    String[] titleArr = new String[4];
    titleArr[0] = "日产液量(吨)";
    titleArr[1] = "日产油量(吨)";
    titleArr[2] = "综合含水(%)";
    titleArr[3] = "动液面(米)";
    //设置线条颜色
     ArrayList colorList = new ArrayList();
     new AboutPic().drawMoreZheXian(timeSeriseList,showList,colorList,groupArr1,titleArr,request.getAttribute("jh")+"井措施初期生产曲线",out,450,300,null,0xE9F3EC);
     }
    %>        </td>
          </tr>
        </table>
        </td>
      </tr>
          <tr>
            <td align="center" colspan="2">
            <font size="+2">【<a href="javascript:window.close()">关闭</a>】</font>
            </td>
          </tr>
    </table><%@ include file="/WEB-INF/jsp/end.jsp" %>
      

  5.   

    jfreechart是不是没前途啊
    好像都没人解答