我用jfreechart生成了K线图,代码如下:
<!---->
<%@ page language="java" contentType="image/png;charset=GB2312"
import="java.awt.*"
import="java.text.*"
import="java.util.*"
import="org.jfree.chart.*"
import="org.jfree.chart.axis.*"
import="org.jfree.chart.servlet.*"
import="org.jfree.chart.plot.*"
import="org.jfree.chart.renderer.*"
import="org.jfree.chart.renderer.category.*"
import="org.jfree.chart.axis.*"
import="org.jfree.chart.entity.*"
import="org.jfree.chart.labels.*"
import="org.jfree.chart.title.*"
import="org.jfree.chart.urls.*"
import="org.jfree.chart.renderer.xy.*"
import="org.jfree.chart.annotations.*"
import="org.jfree.data.*"
import="org.jfree.date.DateUtilities"
import="org.jfree.data.xy.*"
import="org.jfree.data.time.*"
import="org.jfree.data.category.*"
import="org.jfree.date.SerialDate"
import="org.jfree.ui.*"
import="org.jfree.util.*"
import="java.sql.Connection"
import="java.sql.DriverManager"
import="java.sql.Statement"
import="java.sql.ResultSet"
import="org.jfree.data.time.ohlc.OHLCSeries"
import="org.jfree.data.time.ohlc.OHLCSeriesCollection"
%>
<%!
public JFreeChart createChart(OHLCDataset dataset)
{
// 创建图表对象
JFreeChart chart = ChartFactory.createCandlestickChart
(
"X邮票K线图",
"2007年8月",
"邮票价格(元/张)",
dataset,
false
);
return chart;
}
%>
<HTML>
<HEAD>
</HEAD>
<BODY>
<%
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=dvcs517";//mis是数据库名称
String user="sa";//用户名
String password="13391220222";//用户密码
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement();
String sql="select * from kline order by id";//查询数据库
ResultSet rs=stmt.executeQuery(sql);
TimeSeries timeseries = new TimeSeries("日线图",Day.class);
final OHLCSeriesCollection seriesCollection = new OHLCSeriesCollection();//保留K线数据的数据集,必须申明为final,后面要在匿名内部类里面用到
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");//设置日期格式
while(rs.next())
{
float y0=rs.getFloat("open_value");
float y1=rs.getFloat("max_value");
float y2=rs.getFloat("min_value");
float y3=rs.getFloat("close_value");
float y4=rs.getFloat("volume_value");
String s=rs.getString("stock_date");
int x=Integer.parseInt(s.substring(0,4));
int y=Integer.parseInt(s.substring(5,7));
int z=Integer.parseInt(s.substring(8,10));
OHLCSeries series = new OHLCSeries("");//高开低收数据序列,股票K线图的四个数据,依次是开,高,低,收
series.add(new Day(z,y,x),y0,y1,y2,y3);//保留K线数据的数据集,必须申明为final,后面要在匿名内部类里面用到
seriesCollection.addSeries(series);
}
JFreeChart chart = createChart(seriesCollection);
final CandlestickRenderer candlestickRender=new CandlestickRenderer();//设置K线图的画图器,必须申明为final,后面要在匿名内部类里面用到
candlestickRender.setUpPaint(Color.RED);//设置股票上涨的K线图颜色
candlestickRender.setDownPaint(Color.GREEN);//设置股票下跌的K线图颜色
chart.setBackgroundPaint(Color.white);//设置曲线图背景色
XYPlot plot = (XYPlot) chart.getPlot();
DateAxis domainAxis1 = (DateAxis)plot.getDomainAxis();
DateFormat df=new SimpleDateFormat("yyyy-MM-dd");
DateTickUnit unit = new DateTickUnit(DateTickUnit.DAY, 5, df);
domainAxis1.setTickUnit(unit);
ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, info, session);
String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename;
%>
<img src="<%= graphURL %>" border="0" usemap="#<%= filename %>"> </BODY>
</HTML>为什么在股票上涨时显示的K图是绿色,下跌时显示的是红色,有什么解决办法???
<!---->
<%@ page language="java" contentType="image/png;charset=GB2312"
import="java.awt.*"
import="java.text.*"
import="java.util.*"
import="org.jfree.chart.*"
import="org.jfree.chart.axis.*"
import="org.jfree.chart.servlet.*"
import="org.jfree.chart.plot.*"
import="org.jfree.chart.renderer.*"
import="org.jfree.chart.renderer.category.*"
import="org.jfree.chart.axis.*"
import="org.jfree.chart.entity.*"
import="org.jfree.chart.labels.*"
import="org.jfree.chart.title.*"
import="org.jfree.chart.urls.*"
import="org.jfree.chart.renderer.xy.*"
import="org.jfree.chart.annotations.*"
import="org.jfree.data.*"
import="org.jfree.date.DateUtilities"
import="org.jfree.data.xy.*"
import="org.jfree.data.time.*"
import="org.jfree.data.category.*"
import="org.jfree.date.SerialDate"
import="org.jfree.ui.*"
import="org.jfree.util.*"
import="java.sql.Connection"
import="java.sql.DriverManager"
import="java.sql.Statement"
import="java.sql.ResultSet"
import="org.jfree.data.time.ohlc.OHLCSeries"
import="org.jfree.data.time.ohlc.OHLCSeriesCollection"
%>
<%!
public JFreeChart createChart(OHLCDataset dataset)
{
// 创建图表对象
JFreeChart chart = ChartFactory.createCandlestickChart
(
"X邮票K线图",
"2007年8月",
"邮票价格(元/张)",
dataset,
false
);
return chart;
}
%>
<HTML>
<HEAD>
</HEAD>
<BODY>
<%
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=dvcs517";//mis是数据库名称
String user="sa";//用户名
String password="13391220222";//用户密码
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement();
String sql="select * from kline order by id";//查询数据库
ResultSet rs=stmt.executeQuery(sql);
TimeSeries timeseries = new TimeSeries("日线图",Day.class);
final OHLCSeriesCollection seriesCollection = new OHLCSeriesCollection();//保留K线数据的数据集,必须申明为final,后面要在匿名内部类里面用到
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");//设置日期格式
while(rs.next())
{
float y0=rs.getFloat("open_value");
float y1=rs.getFloat("max_value");
float y2=rs.getFloat("min_value");
float y3=rs.getFloat("close_value");
float y4=rs.getFloat("volume_value");
String s=rs.getString("stock_date");
int x=Integer.parseInt(s.substring(0,4));
int y=Integer.parseInt(s.substring(5,7));
int z=Integer.parseInt(s.substring(8,10));
OHLCSeries series = new OHLCSeries("");//高开低收数据序列,股票K线图的四个数据,依次是开,高,低,收
series.add(new Day(z,y,x),y0,y1,y2,y3);//保留K线数据的数据集,必须申明为final,后面要在匿名内部类里面用到
seriesCollection.addSeries(series);
}
JFreeChart chart = createChart(seriesCollection);
final CandlestickRenderer candlestickRender=new CandlestickRenderer();//设置K线图的画图器,必须申明为final,后面要在匿名内部类里面用到
candlestickRender.setUpPaint(Color.RED);//设置股票上涨的K线图颜色
candlestickRender.setDownPaint(Color.GREEN);//设置股票下跌的K线图颜色
chart.setBackgroundPaint(Color.white);//设置曲线图背景色
XYPlot plot = (XYPlot) chart.getPlot();
DateAxis domainAxis1 = (DateAxis)plot.getDomainAxis();
DateFormat df=new SimpleDateFormat("yyyy-MM-dd");
DateTickUnit unit = new DateTickUnit(DateTickUnit.DAY, 5, df);
domainAxis1.setTickUnit(unit);
ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, info, session);
String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename;
%>
<img src="<%= graphURL %>" border="0" usemap="#<%= filename %>"> </BODY>
</HTML>为什么在股票上涨时显示的K图是绿色,下跌时显示的是红色,有什么解决办法???
candlestickRender.setUpPaint(Color.RED);//设置股票上涨的K线图颜色
candlestickRender.setDownPaint(Color.GREEN);//设置股票下跌的K线图颜色这是我在显示错误后加上去的
不用上面的代码,股票上涨时显示的K图是绿色,下跌时显示的是红色,是不是用的jfreechart有问题?国外的股票绿色代表上涨,红色代表下跌
over! 不多言。
plot.setRenderer(candlestickRender);