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,因为有时两边数据一致的时候就能显示.日志里打出来的数据是又是对的.总之我是晕了,不知道怎么解决!
请教高手是怎么回事?
写了一个方法
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,因为有时两边数据一致的时候就能显示.日志里打出来的数据是又是对的.总之我是晕了,不知道怎么解决!
请教高手是怎么回事?
解决方案 »
- axis 怎么传递 c# dataset
- 请教带滚动条的Tabel怎样设置百分比的高度
- ul li 中文字不水平居中!
- tomcat下的javaBean的配置?急!
- HibernateDaoSupport刚生成就有问题..
- eclipse中 add hibernate catabilities 出现提示 :选择的操作当前不可用
- 怎么用JSP编写程序 页面上实现html打印
- 关于SERVLET
- 数据库的查询用getString函数输出时为何不能倒序显示?
- 求jFreeChart的doc.或者有jFreeChart和JSP结合使用的例子,谢了。
- 关于登陆密码问题
- 水晶报表高手请进,关于图形报表事件触发的问题!!!!!!!!!!!!
to: 1111111
我的意思是:我在一个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" %>
好像都没人解答