JSPCN主页 | JSP空间 | 网站制作 | JSP下载 | JSP论坛 | JSP教程 | 关于JSPCN | 联系我们
JSP虚拟主机,jsp空间,java空间,java虚拟空间,详细请点击进入
做最专业的JSP中文网站 当前位置首页--JAVA技术--J2ME  
文章搜索:
关键字 标题
  
JSP中文网内容管理系统(JCMS)
JSP虚拟主机
网络笔记本
网摘,图片,笔记收藏
虚拟服务器

JSPCN文章目录分类
JSP配置[219]JSP基础[136]
中文问题[69]上传问题[27]
JAVABEAN[46]数据库[212]
文件操作[126]图片声音[17]
JSP其他[57]时间相关[16]
JAVAMAIL[72]STRUTS[144]
开发工具[28]教程系列[157]
JSP实例[89]
JAVA基础[421]APPLET[78]
JAVA网络[179]Applica[115]
Servlet[98]XML[163]
J2ME[257]J2EE[374]
考试相关[63]JAVA线程[90]
EJB[261]Swing[26]
Java API[141]声音图片[28]
异常处理[33]JAVA实例[290]
JAVA类[139]SUN[89]
Hibernate[6]JMX[8]
Spring[34]
本版推荐文章 
本版热点文章 
相关文章链接 
 
如何在网站中使用走势图
作者:未知     文章来源:www.jspcn.net
访问次数:529次     加入时间:2005年01月19日
生活中我们经常用到各种图表,走势图就是其中的一种,例如:股票走势图,产品价格走势图,某个网站访问量走势图?D?D没错,现在网站中使用走势图也是越来越普遍了。因为网站本身是为了发布信息而存在的,图表也是信息的一种,所以假如你正在建设一个网站,而网站需要反映一些连续的信息的话,那么用走势图来显示则会显得更加形象和直观,比起简单的在表格中罗列数据要好多了。

一.类及相关方法的介绍

本文将介绍一个生成走势图的控件,并公布基于这个控件开发的javabean的源代码,采用这个javabean,你就可以将价格走势图生成jpg文件,只要在自己的网页里面调用它,便可以用来显示各种走势图,因为是java程序,所以本文源代码是跟平台无关的。

控件名称:JfreeChart

你可以到http://www.object-refinery.com/jfreechart/index.html 这个网址去下载它的zip文件。

JfreeChart介绍:JfreeChart是一个免费的图表程序,100%java程序,目前网上对他的使用和介绍特别少,而且大多是英文的,事实上他的用处却是很大的,他的类很多,能够生成咱们常用的许多图表,限于篇幅,不能一一介绍,这里只挑几个加以说明。

XYSeriesCollection 类:XY坐标搜集类,用来获得XY轴坐标

XYSeries 类:存放XY轴坐标

XYDataset 类:将存放的坐标转换为可用的数据

ChartFactory 类:图表工厂,根据参数生成图表及图表的样式,包含许多静态方法。

ChartUtilities类:图表工具类,它包含了将图表保存为jpg文件的静态方法

作为一般的考虑,事实上为了生成一个走势图,我们只需要知道xy轴的坐标即可,基本程序流程图可以这样来画:



screen.width-333)this.width=screen.width-333;">

就第一步而言,我们可以通过多种方法来获得,比如从数据库中或者从文件中读取,为了突出重点节省篇幅,本文就直接定义一个二维double数组;第二步是关键的一步,我特意写了一个javabean,也就是下面要讲的bean,这里面调用了Jfreechart中的类,实现第三步只需要一句话,所以我就不再罗嗦,程序里面会有说明。

二.实例及源代码

package testchart;

import java.awt.Color;
import java.awt.GradientPaint;
import java.io.OutputStream;
import java.io.IOException;
import java.util.Date;
import java.util.Calendar;
import java.util.GregorianCalendar;
import com.jrefinery.data.*;
import com.jrefinery.date.*;
import java.io.File;
import com.jrefinery.chart.*;
import com.jrefinery.data.*;
/**
* <p>走势图生成程序 </p>
* <p>Description:本走势图生成程序可以生成二维坐标的走势曲线图 </p>
* @author 于秉超
* @version 1.0
*/
public class CreatPriceChart {

public CreatPriceChart(double[][] XYData,int width,int height,String filename) {
this.setXYData(XYData);
this.setWidth(width);
this.setHeight(height);
this.setFilename(filename);
}
/**
* 将走势图保存为JPG文件
* @throws IOException
*/
public void saveChart()throws IOException{
File file = new File(filename) ;
//将走势图保存为文件
ChartUtilities.saveChartAsJPEG(file, createChart(), width, height);
}
/**
* 将XYData数组的数据转换为程序识别的坐标数据
* @return
* @throws SQLException
* @throws Exception
*/
public XYSeriesCollection createXYSeriesCollection()
throws java.sql.SQLException ,Exception{
//声明坐标搜集类
XYSeriesCollection collection = new XYSeriesCollection();
//声明保存坐标类
XYSeries t1 = new XYSeries("");
try {
//将坐标添加到类中
for(int j=0;j<XYData[0].length;j++){
t1.add(XYData[0][j], XYData[1][j]);
}
}catch (Exception e) {
System.err.println(e.getMessage());
}
//将数据搜集起来
collection.addSeries(t1);
return collection;
}
/**
* 根据坐标数据生成走势图曲线
* @return
*/
public JFreeChart createChart() {
JFreeChart chart;//定义一个图表
try {
//将图表转换为可用的数据
XYDataset xyData1 = createXYSeriesCollection();
//生成图表,createXYChart的参数大家可以更改一下看看效果
chart= ChartFactory.createXYChart("","","",xyData1,false);
//定义图表背景图案
chart.setBackgroundPaint(new GradientPaint(0, 0, Color.white, 1200, 0, Color.yellow));
return chart;
}catch (Exception e) {
return null;
}
}
public void setXYData(double[][] XYData) {
this.XYData = XYData;
}
public double[][] getXYData(){
return XYData;
}
public void setWidth(int width) {
this.width = width;
}
public int getWidth() {
return width;
}
public void setHeight(int height) {
this.height = height;
}
public int getHeight() {
return height;
}
public void setFilename(String filename) {
this.filename = filename;
}
public String getFilename() {
return filename;
}

private double[][] XYData;//走势图所需的X轴和Y轴的数据
private int width;//走势图宽度
private int height;//走势图高度
private String filename;//保存的文件名,含全路径
}



然后你可以生成一个应用类来调用上面这个javabean。为了迅速看到结果,我们可以预先初始化两个数组,然后把这两个数组赋值给相应的方法。在实际应用中,我们更有可能先将数据从数据库中读出来,然后再付给数组。我们生成的图片如下图所示:



screen.width-333)this.width=screen.width-333;">

package testchart;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import testchart.CreatPriceChart;

public class Frame1 extends JFrame {
JPanel contentPane;
BorderLayout borderLayout1 = new BorderLayout();

//Construct the frame
public Frame1() {
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try {
jbInit();
testCreatXYChart();//调用生成图表类
}
catch(Exception e) {
e.printStackTrace();
}
}
//Component initialization
private void jbInit() throws Exception {
//setIconImage(Toolkit.getDefaultToolkit().createImage(Frame1.class.getResource("[Your Icon]")));
contentPane = (JPanel) this.getContentPane();
contentPane.setLayout(borderLayout1);
this.setSize(new Dimension(400, 300));
this.setTitle("Frame Title");
}
//关窗口事件
protected void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e);
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
System.exit(0);
}
}
public static void main(String[] args) {
new Frame1().show();
}
//测试图表生成类
void testCreatXYChart(){
//XY轴坐标值
double XYData[][]={{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15},
{800,810,780,640,645,700,720,630,600,550,500,480,300,200,187}
};
CreatPriceChart cpc=new CreatPriceChart(XYData,540,300,"c: ry.jpg");
try{
cpc.saveChart();
}catch(Exception e){
System.out.println(e);
}
}
//显示生成的图表
public void paint(Graphics g){
Image img=Toolkit.getDefaultToolkit().getImage("c: ry.jpg");
g.drawImage(img,10,10,img.getWidth(this),img.getHeight(this),Color.red,this);
}
//消除闪烁
public void update(Graphics g){
paint(g);
}
}



三.小结及应用展望

现在,我们基本了解了如何使用图表生成类,稍加改进,就可以作成一个功能强大的图表生成程序。例如,我们可能遇到这样的需求,假如我们在数据库中保存了大量的每日价格信息数据,现在需要把数据库的近30日的数据作成走势图显示。我们有两种方案。

第一:采用如下流程



screen.width-333)this.width=screen.width-333;">

在这个流程里面,图片是根据用户访问需要动态生成的。

还有一种方法:



screen.width-333)this.width=screen.width-333;">

这个流程最好的方式是将图片每日自动生成存放在硬盘上。

两种方法各有优劣,第一种不占用硬盘的空间,而且编写程序更为简单一些,但是显示速度比较慢,因为要进行数据库查询,尤其当数据量很大的时候,对于服务器压力也很大;第二耗费了硬盘的空间,但是用户访问速度较快,对于数据量大,访问流量较大的网站,我们建议采用第二种方式,以空间换时间。  
JSP虚拟主机 | JSP空间 | JSP主机 | JSP双线虚拟主机 | JAVA空间 | JAVA虚拟主机 | 虚拟服务器 | JSP 虚拟服务器 | VPS
Virtual Private Server | JAVA虚拟服务器 | VM服务器 | VHOST | 虚拟操作系统 | JSP论坛 | JAVA论坛 | JSP站点论坛
Copyright © 2002-2005 JSPCN.net. All rights reserved.
JSP中文网    备案序号:蜀ICP备05001583号
成都恒海科技发展有限公司    成都市一环路南二段6号新瑞楼三楼8号