<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>https://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>https://jackxiang.com/post//</link>
<title><![CDATA[【转】[JSP]jfreechart+sql实现时间曲线图]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Wed, 05 Aug 2009 09:16:32 +0000</pubDate> 
<guid>https://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	用jsp帮助实现的，当中遇到了不少的问题，后来在ITPUB的一些朋友和自己的辛苦努力下终于完成了该程序<br/><br/>学会了自己看API来写程序，正如ITPUB的一位老将所言，如果不会看API，还是放弃编程，在这次事件之后，确实发现，API是编程时不可或缺的“工具”，hoho<br/><br/>在这里把我使用的例子写出来，其中的参数只作参考<br/><br/><转载请注明出处——作者：欣水寓言 Email：fableking17@163.com><br/><br/>一、JFreeChart获取。<br/>JFreeChart是JFreeChart公司在开源网站SourceForge.net上的一个项目，该公司的主要产品有如下：<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、JFreeReport：报表解决工具<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、JFreeChart：Java图形解决方案（Application/Applet/Servlet/Jsp）<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3、JCommon：JFreeReport和JFreeChart的公共类库<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4、JFreeDesigner：JFreeReport的报表设计工具<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; 我们可以从jfree官方网站上获取最新版本和相关资料（但是jfree的document需要40美金才能获取），<br/>&nbsp;&nbsp;&nbsp;&nbsp; 获取地址：http://www.jfree.org/jfreechart/index.html（同时可以获得简明介绍）<br/>&nbsp;&nbsp;&nbsp;&nbsp; 我们以当前最新版本：jfreechart_0.9.21.zip为例子进行说明。<br/><br/>二、JFreeChart配置安装<br/>&nbsp;&nbsp;&nbsp;&nbsp; 1、解压jfreechart_0.9.21.zip到指定位置，其中source是jfreechart的源码，jfreechart-0.9.21-demo.jar<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;是例子程序（该部分留给大家自己去研究）<br/>&nbsp;&nbsp;&nbsp;&nbsp; 2、为了配置成功，我们需要关注的文件有如下三个：jfreechart-0.9.21.jar、lib&#92;jcommon-0.9.6.jar、<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lib&#92;gnujaxp.jar<br/>&nbsp;&nbsp;&nbsp;&nbsp; 3、如果是Application开发，把上述三个文件拷贝到%JAVA_HOME%&#92;LIB中，同时在环境变量CLASSPATH中加入<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果是WEB开发，以TOMCAT中的一个WEB项目TEST为例子说明：<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;把上述三个文件拷贝到TEST&#92;WEB-INF&#92;LIB中，然后修改TEST&#92;WEB-INF&#92;web.xml文件，在其中加入如下代码：<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <servlet><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <servlet-name>DisplayChart</servlet-name><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </servlet><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <servlet-mapping><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <servlet-name>DisplayChart</servlet-name><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <url-pattern>/servlet/DisplayChart</url-pattern><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </servlet-mapping><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;至此jfreechart的配置就完成了，下面就可以进行jfreechart的开发了。这里值得提出的是jfreechart的类<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;结构设计前后兼容性不是很好，不同版本的jfreechart中类库结构可能不一样，有时候可能需要查源码。如果<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;是中文显示的时候可能依据观感需要改变源码的字体，不过我个人觉得这个版本比以前版本要好一些。<br/><br/>三、Demo<br/><%@ page contentType="text/html;charset=GBK"%><br/><%@ page import =" java.awt.*,<br/>java.text.SimpleDateFormat,<br/>javax.swing.JPanel,<br/>org.jfree.chart.ChartFactory,<br/>org.jfree.chart.ChartPanel,<br/>org.jfree.chart.JFreeChart,<br/>org.jfree.chart.axis.DateAxis,<br/>org.jfree.chart.plot.XYPlot,<br/>org.jfree.chart.renderer.xy.XYItemRenderer,<br/>org.jfree.chart.renderer.xy.XYLineAndShapeRenderer,<br/>org.jfree.data.time.*,<br/>org.jfree.data.time.TimeSeries,<br/>org.jfree.data.time.TimeSeriesCollection,<br/>org.jfree.data.xy.XYDataset"%><br/><%@ page import="org.jfree.chart.servlet.ServletUtilities"%><br/><%@ page import="java.util.*"%><br/><%@ page import = "org.jfree.ui.RectangleInsets"%><br/><%@ page import = "java.sql.*"%><br/><%<br/>//连接数据库<br/>Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();<br/>String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=jfree";<br/>String usr="sa";<br/>String pwd="";<br/>Connection conn=DriverManager.getConnection(url,usr,pwd);<br/>Statement stmt=conn.createStatement();<br/>String sql="select * from jfree order by id";<br/>ResultSet rs=stmt.executeQuery(sql);<br/><br/>//设置曲线，共三条曲线<br/>TimeSeries timeseries = new TimeSeries("平均",Minute.class);//时间的最小单位为分，线值名是“平均”<br/>TimeSeries timeseries1 = new TimeSeries("usl",Minute.class);<br/>TimeSeries timeseries2 = new TimeSeries("lsl",Minute.class);<br/><br/>//从数据库中取值，数据和时间<br/>while(rs.next())<br/>&#123;<br/>float y0=rs.getFloat("lengthavg");<br/>float y1=rs.getFloat("lengthusl");<br/>float y2=rs.getFloat("lengthlsl");<br/>String s=rs.getString("addtime");<br/>//从yyyyMMddHHmm时间格式的char中取出年月日小时分设为int值<br/>int x=Integer.parseInt(s.substring(0,4));<br/>int y=Integer.parseInt(s.substring(4,6));<br/>int z=Integer.parseInt(s.substring(6,8));<br/>int a=Integer.parseInt(s.substring(8,10));<br/>int b=Integer.parseInt(s.substring(10,12));<br/><br/>timeseries.add(new Minute(b,new Hour(a,new Day(z,y,x))),y0);<br/>timeseries1.add(new Minute(b,new Hour(a,new Day(z,y,x))),y1);<br/>timeseries2.add(new Minute(b,new Hour(a,new Day(z,y,x))),y2);<br/><br/>&#125;<br/><br/>//连接曲线<br/>TimeSeriesCollection dataset = new TimeSeriesCollection();<br/>dataset.addSeries(timeseries);<br/>dataset.addSeries(timeseries1);<br/>dataset.addSeries(timeseries2);<br/>dataset.setDomainIsPointsInTime(true);<br/><br/>//设置曲线图<br/>XYDataset xydataset = (XYDataset) dataset;<br/>JFreeChart chart = ChartFactory.createTimeSeriesChart(<br/>"走势图",<br/>"时间",<br/>"值",<br/>xydataset,<br/>true,<br/>true,<br/>true<br/>);<br/>chart.setBackgroundPaint(Color.white);//设置曲线图背景色<br/><br/>XYPlot plot = (XYPlot) chart.getPlot();<br/>XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer)plot.getRenderer();<br/>plot.setBackgroundPaint(Color.white));//设置网格背景颜色<br/>plot.setDomainGridlinePaint(Color.pink);//设置网格竖线颜色<br/>plot.setRangeGridlinePaint(Color.pink);//设置网格横线颜色<br/>plot.setAxisOffset(new RectangleInsets(0D, 0D, 0D, 10D));//设置曲线图与xy轴的距离，即曲线与xy轴贴近的距离<br/>xylineandshaperenderer.setBaseShapesVisible(true);//设置曲线是否显示数据点<br/><br/>String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, null, session);<br/>String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename;<br/>%><br/><img src="<%= graphURL %>" border=0 usemap="#<%= filename %>"><br/><br/><br/>另外说一下，以前看到有很多人都说不能显示图，出来一个叉，一般那都是设置的servlet的错，我看到有的人就是用设置为servlets的<br/>所以就要在String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename;中<br/>改为String graphURL = request.getContextPath() + "/servlets /DisplayChart?filename=" + filename;的<br/>这个都要具体对待，出来叉的话有一点是肯定的，程序代码中没有程序错误，只是路径错误而已<br/><br/>注意：有些类没有的话，可能是版本更换的问题，可以去源码或者API中找找看，有可能是换了位置，也可能是换了名字 
]]>
</description>
</item><item>
<link>https://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] 【转】[JSP]jfreechart+sql实现时间曲线图]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>https://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>