- 浏览: 141473 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
puyancheng1988:
哥们儿,我用的jfreechart在linux服务器上生成的图 ...
JFreeChart图表 -
soujava:
...
Linux下Oracle自动备份脚本 -
skylikeblue:
...
基于JAVA实现的手机收发短消息系统
生活中我们经常用到各种图表,走势图就是其中的一种,例如:股票走势图,产品价格走势图,某个网站访问量走势图?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轴的坐标即可,基本程序流程图可以这样来画:
就第一步而言,我们可以通过多种方法来获得,比如从数据库中或者从文件中读取,为了突出重点节省篇幅,本文就直接定义一个二维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>
*/
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。为了迅速看到结果,我们可以预先初始化两个数组,然后把这两个数组赋值给相应的方法。在实际应用中,我们更有可能先将数据从数据库中读出来,然后再付给数组。我们生成的图片如下图所示:
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:\\try.jpg");
try{
cpc.saveChart();
}catch(Exception e){
System.out.println(e);
}
}
//显示生成的图表
public void paint(Graphics g){
Image img=Toolkit.getDefaultToolkit().getImage("c:\\try.jpg");
g.drawImage(img,10,10,img.getWidth(this),img.getHeight(this),Color.red,this);
}
//消除闪烁
public void update(Graphics g){
paint(g);
}
}
三.小结及应用展望
现在,我们基本了解了如何使用图表生成类,稍加改进,就可以作成一个功能强大的图表生成程序。例如,我们可能遇到这样的需求,假如我们在数据库中保存了大量的每日价格信息数据,现在需要把数据库的近30日的数据作成走势图显示。我们有两种方案。
第一:采用如下流程
在这个流程里面,图片是根据用户访问需要动态生成的。
还有一种方法:
这个流程最好的方式是将图片每日自动生成存放在硬盘上。
两种方法各有优劣,第一种不占用硬盘的空间,而且编写程序更为简单一些,但是显示速度比较慢,因为要进行数据库查询,尤其当数据量很大的时候,对于服务器压力也很大;第二耗费了硬盘的空间,但是用户访问速度较快,对于数据量大,访问流量较大的网站,我们建议采用第二种方式,以空间换时间。
发表评论
-
Cannot access NLS data files问题的解决办法
2008-10-24 15:14 1441我用的myeclipse 6.5版本,oracle是10g版 ... -
Java Web定时任务
2008-10-28 10:04 549在工程的WEB-INF\web.xml配置文件中加入如下三行, ... -
BeanUtil常用方法
2008-10-31 14:25 908Apache Common BeanUtil是一个常用的在对 ... -
安装Visual Editor
2008-11-03 17:05 1257在Eclipse 3.3.2中安装Visual Editor ... -
BeanUtils.copyProperties出现了问题的原因
2008-11-11 15:16 1130使用BeanUtils.copyProperties( des ... -
Servlet/Jsp性能优化
2008-03-05 16:21 719你的J2EE应用是不是运行的很慢?它们能不能承受住不断上升的访 ... -
系统构建高性能J2EE应用的五种核心策略
2008-03-05 16:26 628于J2EE,我们知道当开发 ... -
JFreeChart图表
2008-03-05 16:30 1609在我们编程时如果要把结果显示成图表形式,就离不开JFreeCh ... -
JFreeChart综合应用
2008-03-05 16:40 747JFreeChart是一个开源的JAVA项目,它主要用来开发各 ... -
要成为Java高手需要注意的25个学习目标
2008-04-05 14:16 5511、你需要精通面向对象 ... -
使用Axis开发Web Service实例
2008-06-03 15:40 849一、Axis安装 1、环境 J2SE SDK 1.3 or 1 ... -
Java实现HTTP的断点续传
2008-06-05 10:39 634(一)断点续传的原理 其实断点续传的原理很简单,就是在Ht ... -
java串口编程
2008-06-05 11:00 1214一年半前在jbuilder2006下写过串口通信程序,最近做一 ... -
Java串行端口技术协议
2008-06-05 11:06 790串行通讯协议有很 ... -
基于JAVA实现的手机收发短消息系统
2008-06-05 11:14 15010 引 言 目前基于GSM网络的短消息应用越来越多。由于采用短 ... -
多国语表单提交乱码问题
2008-06-30 10:43 7931、所有文件都以-utf-8编码格式保存 2、所有文件都设置 ... -
网站跨站点单点登录
2008-07-03 13:20 1093昨天和几位朋友探讨到 ... -
FreeMarker概述
2008-07-03 14:43 748快速入门 (1)模板 + ... -
使用FreeMarker生成Html静态文件(实例)
2008-07-04 10:31 760以下是我在生成新闻的静态文件时用到的代码.仅供参考.请根据实际 ... -
FreeMarker学习手册
2008-07-04 17:11 823(1)模板 + 数据模型 = 输 ...
相关推荐
在曲线走势图的实现中,JFreeChart的LineChart类是关键,它能根据数据点绘制出平滑的曲线。 实现曲线走势图的具体步骤如下: 1. 引入依赖:在项目中添加JFreeChart的库,可以通过Maven或Gradle等构建工具引入相应...
在本文中,我们将使用Java语言来实现股票走势图的绘制。股票走势图是一种常见的证券行业图表,用于显示股票的价格走势。本文将逐步介绍如何使用Java语言来实现股票走势图的绘制,包括坐标系的设置、数据的读取和处理...
- 在金融领域,JFreeChart可用于生成股票价格走势图、K线图,帮助分析师进行市场分析。 - 教育应用中,教师可以使用它来创建数学函数图,直观展示复杂的数学概念。 - 在数据分析项目中,JFreeChart可以帮助呈现统计...
在金融领域,K线图(也称为日本蜡烛图)是一种常用的技术分析工具,用于展示价格走势。本文将详细介绍如何使用 JFreeChart 创建股票K线图。 首先,了解 JFreeChart 的核心组件: 1. **JFreeChart**: - 这是生成...
要在Struts 2应用中使用JFreeChart,首先需要在项目中添加JFreeChart和Struts 2的依赖。接着,创建一个Action类,处理用户请求并生成图表。使用JFreeChart API创建图表对象,设置数据源、类型、颜色等属性。最后,...
jfreechart饼状图的应用场景很多,例如:网站访问统计、销售数据分析、股票走势分析等。jfreechart饼状图可以帮助开发者快速生成图表,提高开发效率和产品质量。 jfreechart饼状图是一个功能强大且灵活的图表类型,...
在提供的压缩包文件中,可能包含了一些示例代码或Web应用的配置文件,帮助你理解如何在实际项目中部署和使用JFreeChart。通过研究这些文件,你可以更深入地掌握JFreeChart的用法,并将其应用到你的项目中,实现数据...
在JFreeChart中,你可以轻松创建直方图来展示连续数据的分布情况。直方图通常用于展示大量数据的分布特性,如年龄分布、收入分布等。JFreeChart提供了丰富的定制选项,包括颜色、填充样式、边缘样式等,可以根据需求...
使用JFreeChart时,开发者首先需要实例化一个Chart对象,然后可以添加数据系列到图表中,配置图表的外观(例如标题、轴标签、图例等),最后将图表渲染到一个图形组件上,如Java的JPanel,以便在GUI应用中显示。...
在股票分析软件中,JFreeChart可以绘制折线图展示股价走势。 总结,JFreeChart凭借其强大的图表生成能力和灵活的定制选项,成为了Java开发者的得力助手。通过对源码、库文件和示例的深入理解和实践,开发者可以更好...
在项目中集成 JFreeChart 非常简单,通常只需要将 JFreeChart 的 jar 包添加到项目的类路径中。对于现代的构建工具如 Maven 或 Gradle,可以通过在配置文件中添加相应的依赖项来实现自动化管理。 ### 三、图表创建 ...
使用JFreeChart首先需要将其库文件添加到项目依赖中。对于Maven项目,可以在pom.xml文件中添加以下依赖: ```xml <groupId>org.jfree <artifactId>jfreechart <version>1.5.3 ``` 对于非Maven项目,可以直接...
标题中的“java+jfreechart 做股票日线数据查看系统”表明这是一个使用Java编程语言,结合JFreeChart库来实现的项目,主要用于展示股票的日线数据,即每日的开盘价、收盘价、最高价、最低价以及交易量等关键信息。...
此外,JFreeChart 可以将图表导出为各种格式,如 PNG、JPEG、SVG 和 PDF,方便在网页、PDF 报告或打印材料中使用。 **5. 高级功能** - **3D 效果**:JFreeChart 提供了立体图表,使可视化更具有深度感。 - **组合...
### 八、在 Web 应用中使用 JFreeChart 1. **创建 Web 工程**:在 IDE 中创建一个新的 Web 工程,如在 MyEclipse 中选择 "New -> Dynamic Web Project"。 2. **配置 web.xml**:在 `web.xml` 中配置Servlet,用于...
JFreeChart 在多个领域有广泛应用,如金融分析中的股票走势图,科学计算中的数据可视化,以及企业管理软件中的报表展示。其灵活性和丰富的定制性使得开发者能够根据具体需求设计出独特的图表样式和交互体验。 总之...
发布包通常包含JFreeChart的编译后版本,包括jar文件,可以直接引入到Java项目中使用。这些预编译的类库允许开发者无需构建源码就能在自己的应用中利用JFreeChart的功能,比如创建饼图、柱状图、线图、散点图等。 ...
例如,在金融报告中,可以利用jfreechart绘制股票走势、财务指标对比等图表;在教育领域,用于展示学生成绩分布、学科关联性;在科学研究中,可用于数据可视化,帮助研究人员快速理解大量实验数据。 总结来说,...
JFreeChart 和 JCommon 是两个在Java开发中广泛使用的库,特别是对于那些需要生成高质量图表和图形的应用程序。这两个库是密切相关的,因为JFreeChart依赖于JCommon来提供基础的绘图功能。 **JFreeChart简介** ...