JFreeChart 心得
来源:互联网 发布:linux下查看mysql用户 编辑:程序博客网 时间:2024/05/16 15:47
今天用JFreeChart做曲线图来表示一个矿物局在一个月内的销售量.在开发的过程中遇到了不少问题.
首先我要说的是
求出当前年月..哪年哪月...
然后求出 这个月有多少天.(并不是所有月的天数是固定的,所以要根据实际情况求出月份天数)
//年份
SimpleDateFormat nf = new SimpleDateFormat("yyyy");
java.util.Date nownf = new java.util.Date() ;
String currentyear = nf.format(nownf);
System.out.println(currentyear);
int year=Integer.parseInt(currentyear); //为了Calendar 才转化成int类型
//月份
SimpleDateFormat df = new SimpleDateFormat("MM");
java.util.Date now = new java.util.Date() ;
String currentmonth = df.format(now);
System.out.println(currentmonth);
int month=Integer.parseInt(currentmonth); //为了Calendar 才转化成int类型
//一个月有多少天数
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR,year);
cal.set(Calendar.MONTH,month-1);//Calendar.MONTH - 用来设置 MONTH 日历字段的值。Month 值是基于 0 的。例如,0 表示 1月份。
int maxDate= cal.getActualMaximum(Calendar.DATE);//返回指定日历字段可能拥有的最大值
System.out.println("maxDate="+maxDate);
int minDate= cal.getActualMinimum(Calendar.DATE);//返回指定日历字段可能拥有的最小值
System.out.println("minDate="+minDate);
SimpleDateFormat nf = new SimpleDateFormat("yyyy");
java.util.Date nownf = new java.util.Date() ;
String currentyear = nf.format(nownf);
System.out.println(currentyear);
int year=Integer.parseInt(currentyear); //为了Calendar 才转化成int类型
//月份
SimpleDateFormat df = new SimpleDateFormat("MM");
java.util.Date now = new java.util.Date() ;
String currentmonth = df.format(now);
System.out.println(currentmonth);
int month=Integer.parseInt(currentmonth); //为了Calendar 才转化成int类型
//一个月有多少天数
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR,year);
cal.set(Calendar.MONTH,month-1);//Calendar.MONTH - 用来设置 MONTH 日历字段的值。Month 值是基于 0 的。例如,0 表示 1月份。
int maxDate= cal.getActualMaximum(Calendar.DATE);//返回指定日历字段可能拥有的最大值
System.out.println("maxDate="+maxDate);
int minDate= cal.getActualMinimum(Calendar.DATE);//返回指定日历字段可能拥有的最小值
System.out.println("minDate="+minDate);
然出开始做"曲线图"
//曲线的样式类型,月:MONTH , 天:DAY ,小时:HOUR,分钟:Minute
//TimeSeries series1 = new TimeSeries("实时状态图", Month.class);
//TimeSeries series2 = new TimeSeries("实时状态图", Day.class);
//TimeSeries series3 = new TimeSeries("实时状态图", Hour.class);
//TimeSeries series4 = new TimeSeries("实时状态图", Minute.class);
//TimeSeries series1 = new TimeSeries("实时状态图", Month.class);
//TimeSeries series2 = new TimeSeries("实时状态图", Day.class);
//TimeSeries series3 = new TimeSeries("实时状态图", Hour.class);
//TimeSeries series4 = new TimeSeries("实时状态图", Minute.class);
org.jfree.data.time
Class Month
Month()
Constructs a new Month, based on the current system time.
Month(java.util.Date time)
Constructs a new month instance, based on a date/time and the default time zone.
Month(java.util.Date time, java.util.TimeZone zone)
Constructs a Month, based on a date/time and a time zone.
Month(int month, int year)
Constructs a new month instance.
Month(int month, Year year)
Constructs a new month instance.
org.jfree.data.time
Class Day
Day()
Creates a new instance, derived from the system date/time (and assuming the default timezone).
Day(java.util.Date time)
Constructs a new instance, based on a particular date/time and the default time zone.
Day(java.util.Date time, java.util.TimeZone zone)
Constructs a new instance, based on a particular date/time and time zone.
Day(int day, int month, int year)
Constructs a new one day time period.
Day(org.jfree.date.SerialDate serialDate)
Constructs a new one day time period.
org.jfree.data.time
Class Minute
Minute()
Constructs a new Minute, based on the system date/time.
Minute(java.util.Date time)
Constructs a new Minute, based on the supplied date/time.
Minute(java.util.Date time, java.util.TimeZone zone)
Constructs a new Minute, based on the supplied date/time and timezone.
Minute(int minute, Hour hour)
Constructs a new Minute.
Minute(int minute, int hour, int day, int month, int year)
Creates a new minute.
org.jfree.data.time
Class Hour
Hour()
Constructs a new Hour, based on the system date/time.
Hour(java.util.Date time)
Constructs a new Hour, based on the supplied date/time.
Hour(java.util.Date time, java.util.TimeZone zone)
Constructs a new Hour, based on the supplied date/time evaluated in the specified time zone.
Hour(int hour, Day day)
Constructs a new Hour.
Hour(int hour, int day, int month, int year)
Creates a new hour.
Class Month
Month()
Constructs a new Month, based on the current system time.
Month(java.util.Date time)
Constructs a new month instance, based on a date/time and the default time zone.
Month(java.util.Date time, java.util.TimeZone zone)
Constructs a Month, based on a date/time and a time zone.
Month(int month, int year)
Constructs a new month instance.
Month(int month, Year year)
Constructs a new month instance.
org.jfree.data.time
Class Day
Day()
Creates a new instance, derived from the system date/time (and assuming the default timezone).
Day(java.util.Date time)
Constructs a new instance, based on a particular date/time and the default time zone.
Day(java.util.Date time, java.util.TimeZone zone)
Constructs a new instance, based on a particular date/time and time zone.
Day(int day, int month, int year)
Constructs a new one day time period.
Day(org.jfree.date.SerialDate serialDate)
Constructs a new one day time period.
org.jfree.data.time
Class Minute
Minute()
Constructs a new Minute, based on the system date/time.
Minute(java.util.Date time)
Constructs a new Minute, based on the supplied date/time.
Minute(java.util.Date time, java.util.TimeZone zone)
Constructs a new Minute, based on the supplied date/time and timezone.
Minute(int minute, Hour hour)
Constructs a new Minute.
Minute(int minute, int hour, int day, int month, int year)
Creates a new minute.
org.jfree.data.time
Class Hour
Hour()
Constructs a new Hour, based on the system date/time.
Hour(java.util.Date time)
Constructs a new Hour, based on the supplied date/time.
Hour(java.util.Date time, java.util.TimeZone zone)
Constructs a new Hour, based on the supplied date/time evaluated in the specified time zone.
Hour(int hour, Day day)
Constructs a new Hour.
Hour(int hour, int day, int month, int year)
Creates a new hour.
例如:我自己的程序。
//当前月份 当前年份(哈哈,month,year要int类型的,所以我在前面就类型转换了)
//Month month1=new Month(int month,int year);
//Day day = new Day(1, 11, 2007); // 定义日期
//Minute current = new Minute(2, 14, 14, 11, 2007); // 图形使用的时间
//以上三个构造函数所要的参数都是int类型的哦
//Month month1=new Month(int month,int year);
//Day day = new Day(1, 11, 2007); // 定义日期
//Minute current = new Minute(2, 14, 14, 11, 2007); // 图形使用的时间
//以上三个构造函数所要的参数都是int类型的哦
具体的代码如下:
ChartServlet1.java
package com.test.chart;
import java.io.IOException;
import java.io.OutputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.DateTickUnit;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.Range;
import org.jfree.data.time.Day;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
public class ChartServlet1 extends HttpServlet ...{
private static final String CONTENT_TYPE = "text/html; charset=GBK";
// Initialize global variables
public void init() throws ServletException ...{
}
// service
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException ...{
OutputStream out = response.getOutputStream(); // 定义输出流
try ...{
JFreeChart chart = null; // 创建图标工具
chart = createTimeSeriesChart(); // 产生折线图
if (chart != null) ...{
response.setContentType("image/png"); // 定义类型
ChartUtilities.writeChartAsPNG(out, chart, 600, 300); // 输出
}
} catch (Exception e) ...{
System.err.println(e.toString());
} finally ...{
out.close(); // 关闭流
}
}
private JFreeChart createTimeSeriesChart() ...{
//年份
SimpleDateFormat nf = new SimpleDateFormat("yyyy");
java.util.Date nownf = new java.util.Date() ;
String currentyear = nf.format(nownf);
System.out.println(currentyear);
int year=Integer.parseInt(currentyear);
//月份
SimpleDateFormat df = new SimpleDateFormat("MM");
java.util.Date now = new java.util.Date() ;
String currentmonth = df.format(now);
System.out.println(currentmonth);
int month=Integer.parseInt(currentmonth);
//一个月有多少天数
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR,year);
cal.set(Calendar.MONTH,month-1);//Calendar.MONTH - 用来设置 MONTH 日历字段的值。Month 值是基于 0 的。例如,0 表示 1月份。
int maxDate= cal.getActualMaximum(Calendar.DATE);//返回指定日历字段可能拥有的最大值
System.out.println("maxDate="+maxDate);
int minDate= cal.getActualMinimum(Calendar.DATE);//返回指定日历字段可能拥有的最小值
System.out.println("minDate="+minDate);
//TimeSeries series2 = new TimeSeries("实时状态图",Month.class); // 第一条折线
TimeSeries series = new TimeSeries("实时状态图",Day.class); // 第一条折线
Day day;
// 添加测试数据 maxDate 就是当前月份最大的天数
//最大值就是表示当前月有多少天
for (int i = 1; i <=maxDate; i++) ...{
//day=new Day(1,11,2007);//2007年11月1日开始
day = new Day(i,month, year); // 定义日期
series.add(day, Math.random() * 100); // 添加数据
System.out.println("day="+day);
}
TimeSeriesCollection timeseriescollection = new TimeSeriesCollection(); // 定义折线集合
timeseriescollection.addSeries(series); // 添加第一条曲线
//timeseriescollection.addSeries(series2); // 添加第二条曲线
JFreeChart chart = ChartFactory.createTimeSeriesChart("xxx矿物局煤炭销售总量",
"日", "销售量", timeseriescollection, true, true, false);
// Date valueOf(String s)将 JDBC 日期转义形式的字符串转换成 Date 值。
// public Date(int year, int month, int date, int hrs, int min) {
// year - 减 1900 的年份。
// month - 0-11 之间的月份。
// date - 一月中 1-31 之间的某一天。
// hrs - 0-23 之间的小时数。
// min - 0-59 之间的分钟数。
int years=year-1900;
int months=month-1;
Date min = new Date(years, months, minDate);
Date max = new Date(years, months, maxDate);
XYPlot xyplot = chart.getXYPlot();
DateAxis dateAxis = (DateAxis) xyplot.getDomainAxis();
// 横坐标设置
//dateAxis.setMaximumDate(max); // 日期轴上的最大日期
//dateAxis.setMinimumDate(min); // 日期轴上的最小日期
dateAxis.setRange(min,max); // 日期轴上的最小日期,最大日期
//dateAxis.setTickLabelsVisible(true); //坐标轴标尺值是否显示
dateAxis.setTickUnit(new DateTickUnit(2,1)); //设置坐标轴标尺值显示间隔 public void setTickUnit(DateTickUnit unit)
dateAxis.setDateFormatOverride(new SimpleDateFormat("dd")); //日期轴日期标签的显示格式 只显示 日(号)
// 纵坐标设定
ValueAxis valueaxis = null;
valueaxis = xyplot.getRangeAxis();
valueaxis.setRange(0.0D, 200D); // 高度范围为 0 - 200 sp:销售量
return chart;
}
// Clean up resources
public void destroy() ...{
}
}
import java.io.IOException;
import java.io.OutputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.DateTickUnit;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.Range;
import org.jfree.data.time.Day;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
public class ChartServlet1 extends HttpServlet ...{
private static final String CONTENT_TYPE = "text/html; charset=GBK";
// Initialize global variables
public void init() throws ServletException ...{
}
// service
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException ...{
OutputStream out = response.getOutputStream(); // 定义输出流
try ...{
JFreeChart chart = null; // 创建图标工具
chart = createTimeSeriesChart(); // 产生折线图
if (chart != null) ...{
response.setContentType("image/png"); // 定义类型
ChartUtilities.writeChartAsPNG(out, chart, 600, 300); // 输出
}
} catch (Exception e) ...{
System.err.println(e.toString());
} finally ...{
out.close(); // 关闭流
}
}
private JFreeChart createTimeSeriesChart() ...{
//年份
SimpleDateFormat nf = new SimpleDateFormat("yyyy");
java.util.Date nownf = new java.util.Date() ;
String currentyear = nf.format(nownf);
System.out.println(currentyear);
int year=Integer.parseInt(currentyear);
//月份
SimpleDateFormat df = new SimpleDateFormat("MM");
java.util.Date now = new java.util.Date() ;
String currentmonth = df.format(now);
System.out.println(currentmonth);
int month=Integer.parseInt(currentmonth);
//一个月有多少天数
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR,year);
cal.set(Calendar.MONTH,month-1);//Calendar.MONTH - 用来设置 MONTH 日历字段的值。Month 值是基于 0 的。例如,0 表示 1月份。
int maxDate= cal.getActualMaximum(Calendar.DATE);//返回指定日历字段可能拥有的最大值
System.out.println("maxDate="+maxDate);
int minDate= cal.getActualMinimum(Calendar.DATE);//返回指定日历字段可能拥有的最小值
System.out.println("minDate="+minDate);
//TimeSeries series2 = new TimeSeries("实时状态图",Month.class); // 第一条折线
TimeSeries series = new TimeSeries("实时状态图",Day.class); // 第一条折线
Day day;
// 添加测试数据 maxDate 就是当前月份最大的天数
//最大值就是表示当前月有多少天
for (int i = 1; i <=maxDate; i++) ...{
//day=new Day(1,11,2007);//2007年11月1日开始
day = new Day(i,month, year); // 定义日期
series.add(day, Math.random() * 100); // 添加数据
System.out.println("day="+day);
}
TimeSeriesCollection timeseriescollection = new TimeSeriesCollection(); // 定义折线集合
timeseriescollection.addSeries(series); // 添加第一条曲线
//timeseriescollection.addSeries(series2); // 添加第二条曲线
JFreeChart chart = ChartFactory.createTimeSeriesChart("xxx矿物局煤炭销售总量",
"日", "销售量", timeseriescollection, true, true, false);
// Date valueOf(String s)将 JDBC 日期转义形式的字符串转换成 Date 值。
// public Date(int year, int month, int date, int hrs, int min) {
// year - 减 1900 的年份。
// month - 0-11 之间的月份。
// date - 一月中 1-31 之间的某一天。
// hrs - 0-23 之间的小时数。
// min - 0-59 之间的分钟数。
int years=year-1900;
int months=month-1;
Date min = new Date(years, months, minDate);
Date max = new Date(years, months, maxDate);
XYPlot xyplot = chart.getXYPlot();
DateAxis dateAxis = (DateAxis) xyplot.getDomainAxis();
// 横坐标设置
//dateAxis.setMaximumDate(max); // 日期轴上的最大日期
//dateAxis.setMinimumDate(min); // 日期轴上的最小日期
dateAxis.setRange(min,max); // 日期轴上的最小日期,最大日期
//dateAxis.setTickLabelsVisible(true); //坐标轴标尺值是否显示
dateAxis.setTickUnit(new DateTickUnit(2,1)); //设置坐标轴标尺值显示间隔 public void setTickUnit(DateTickUnit unit)
dateAxis.setDateFormatOverride(new SimpleDateFormat("dd")); //日期轴日期标签的显示格式 只显示 日(号)
// 纵坐标设定
ValueAxis valueaxis = null;
valueaxis = xyplot.getRangeAxis();
valueaxis.setRange(0.0D, 200D); // 高度范围为 0 - 200 sp:销售量
return chart;
}
// Clean up resources
public void destroy() ...{
}
}
显示的页面:
<%@page contentType="text/html;charset=GB2312" language="java" %>
<html>
<head>
</head>
<script type="text/javascript">
var req;
//setInterval( "castVote()" , 3000 ) //每隔3秒调用一次
function castVote(rank) ...{
// This demo uses simple Html/JS only, so we load a static html page
var url = "ii.jsp"; //ii.jsp随便写什么东西 "hello"
var callback = processAjaxResponse;
executeXhr(callback, url);
}
function executeXhr(callback, url) ...{
// branch for native XMLHttpRequest object
if (window.XMLHttpRequest) ...{
req = new XMLHttpRequest();
req.onreadystatechange = callback;
req.open("GET", url, true);
req.send(null);
} // branch for IE/Windows ActiveX version
else if (window.ActiveXObject) ...{
req = new ActiveXObject("Microsoft.XMLHTTP");
if (req) ...{
req.onreadystatechange = callback;
req.open("GET", url, true);
req.send();
}
}
}
function processAjaxResponse() ...{
// only if req shows "loaded"
if (req.readyState == 4) ...{
// only if "OK"
if (req.status == 200) ...{
document.getElementById('votes').innerHTML = req.responseText;
} else ...{
alert("There was a problem retrieving the XML data: " +
req.statusText);
}
}
}
</script>
<body>
<div id="votes"><IMG src='myjfreecharttest' BORDER=1 WIDTH=600 HEIGHT=300/></div>
</body>
</html>
<html>
<head>
</head>
<script type="text/javascript">
var req;
//setInterval( "castVote()" , 3000 ) //每隔3秒调用一次
function castVote(rank) ...{
// This demo uses simple Html/JS only, so we load a static html page
var url = "ii.jsp"; //ii.jsp随便写什么东西 "hello"
var callback = processAjaxResponse;
executeXhr(callback, url);
}
function executeXhr(callback, url) ...{
// branch for native XMLHttpRequest object
if (window.XMLHttpRequest) ...{
req = new XMLHttpRequest();
req.onreadystatechange = callback;
req.open("GET", url, true);
req.send(null);
} // branch for IE/Windows ActiveX version
else if (window.ActiveXObject) ...{
req = new ActiveXObject("Microsoft.XMLHTTP");
if (req) ...{
req.onreadystatechange = callback;
req.open("GET", url, true);
req.send();
}
}
}
function processAjaxResponse() ...{
// only if req shows "loaded"
if (req.readyState == 4) ...{
// only if "OK"
if (req.status == 200) ...{
document.getElementById('votes').innerHTML = req.responseText;
} else ...{
alert("There was a problem retrieving the XML data: " +
req.statusText);
}
}
}
</script>
<body>
<div id="votes"><IMG src='myjfreecharttest' BORDER=1 WIDTH=600 HEIGHT=300/></div>
</body>
</html>
web.xml 配置
<servlet>
<servlet-name>myjfreechart</servlet-name>
<servlet-class>com.test.chart.ChartServlet1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>myjfreechart</servlet-name>
<url-pattern>/myjfreecharttest</url-pattern>
</servlet-mapping>
<servlet-name>myjfreechart</servlet-name>
<servlet-class>com.test.chart.ChartServlet1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>myjfreechart</servlet-name>
<url-pattern>/myjfreecharttest</url-pattern>
</servlet-mapping>
- JFreeChart 心得
- jfreechart使用心得
- jfreechart使用心得
- JFreeChart使用心得与例子
- JFreeChart使用心得与例子
- JFreeChart使用心得与例子
- JFreeChart使用心得与例子
- JFreeChart使用心得与例子
- JFreeChart在JSP开发中的应用心得
- JFreeChart在JSP开发中的应用心得
- jfreechart使用心得与例子(jsp)
- jsp JFreeChart使用心得与例子
- jsp JFreeChart使用心得与例子
- JFreeChart
- JFreeChart
- JFreeChart
- JFreeChart
- JFreeChart
- 简单代理服务器C代码实现(SOLARIS)
- problem 1181
- Eclipse 3.2 上配置JSP开发环境
- 远离电脑病完全手册
- 当重新安装Windows XP时保留OEM预激活
- JFreeChart 心得
- SEH&&try catch
- AJAX 介绍
- 搜到 一个js判断上传的文件大小的代码
- 验证码
- ADO.NET 学习笔记
- Error Handling with Exceptions【1】
- Asp.net支持的最大上传文件大小
- Windows XP 超级140个技巧