在JAVA的图形开发中,JFreeChart提供源代码及DEMO代码,详细的API工具,如果遇到问题还可以到http://www.jfree.org/phpBB2这个论坛一问究竟,全面的技术支持使图形开发起来得心应手!
下面的例子是用JFreeChart开发股票K线图,附有注释
import
java.sql.
*
;
import
java.text.SimpleDateFormat;
import
java.util.
*
;
import
java.lang.
*
;
import
java.awt.Color;
import
java.awt.Font;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
import
java.text.DecimalFormat;
import
java.text.SimpleDateFormat;
import
java.util.ArrayList;
import
java.util.Calendar;
import
java.util.Date;
import
java.util.HashMap;
import
java.util.Iterator;
import
java.util.List;
import
java.util.Map;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
import
javax.swing.JApplet;
import
javax.swing.JPanel;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
import
org.jfree.chart.ChartFrame;
import
org.jfree.chart.ChartPanel;
import
org.jfree.chart.JFreeChart;
import
org.jfree.chart.axis.DateAxis;
import
org.jfree.chart.axis.DateTickMarkPosition;
import
org.jfree.chart.axis.NumberTickUnit;
import
org.jfree.chart.axis.SegmentedTimeline;
import
org.jfree.chart.axis.DateTickUnit;
import
org.jfree.chart.axis.NumberAxis;
import
org.jfree.chart.block.BlockBorder;
import
org.jfree.chart.block.BlockContainer;
import
org.jfree.chart.block.BorderArrangement;
import
org.jfree.chart.labels.StandardXYToolTipGenerator;
import
org.jfree.chart.plot.CombinedDomainXYPlot;
import
org.jfree.chart.plot.Marker;
import
org.jfree.chart.plot.Plot;
import
org.jfree.chart.plot.XYPlot;
import
org.jfree.chart.renderer.xy.CandlestickRenderer;
import
org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import
org.jfree.chart.title.LegendTitle;
import
org.jfree.data.general.Dataset;
import
org.jfree.data.time.Day;
import
org.jfree.data.time.TimeSeries;
import
org.jfree.data.time.TimeSeriesCollection;
import
org.jfree.data.xy.DefaultHighLowDataset;
import
org.jfree.data.xy.IntervalXYDataset;
import
org.jfree.data.xy.OHLCDataset;
import
org.jfree.ui.HorizontalAlignment;
import
org.jfree.ui.RectangleEdge;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
public
class
TestMinute
...
{
List ls = new ArrayList();//定义一个用来保存数据的集合类List
double max_vol,min_vol,max_pr,min_pr;
Date firstt,lastt;
Map map = null;//用来表示一条记录
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public void clearList()...{
//清空保存数据的集合类List
ls.clear();
}
///该方法主要是为WEB端的JS调用,定义一个新的Map,插入一行空的记录
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public void insertRecord() ...{
map = new HashMap();
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
///该方法主要是为WEB端的JS调用,为当前记录设置值
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public void setValue(java.lang.String string, java.lang.String value) ...{
map.put(string, value);
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
///该方法主要是为WEB端的JS调用,把当前记录添加到记录集List里
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public void postRecord() ...{
ls.add(map);
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public double[] calavergerprice(int datenum,double[] val)...{
int ini_num = val.length;
int size = ini_num-datenum+1;
double[] res = new double[size];
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
for(int i = 0;i<size;i++)...{
double tempval = 0.0;
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
for(int j = i;j<(i+datenum);j++)...{
tempval = tempval+val[j];
}
res[i] = tempval/datenum;
}
return res;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
//将数据库中数据读入ls集合中
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public void readData(java.lang.String stock_id,int record_num)...{
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
try...{
Connection con = DatabaseConnection.getConection();
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("select * from stockminute where stock_id = '"+stock_id+"' order by tran_time desc limit "+record_num);
double[] temp_avg = new double[record_num];
double[] vol_temp_avg = new double[record_num];
int index = 0;
int vol_index = 0;
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
while(rs.next())...{
temp_avg[index++] = rs.getDouble(7);
vol_temp_avg[vol_index++] = rs.getDouble(8);
}
//5,10,30日均价
double[] avg5 = this.calavergerprice(5, temp_avg);
double[] avg10 = this.calavergerprice(10, temp_avg);
double[] avg30 = this.calavergerprice(30, temp_avg);
//5,10,30日均成交量