可随意转载,但请注明出处及作者
sonymusic
2003.05.15
==========================================================================
在java中使用oracle chart builder输出图表
package test.chart;
import java.awt.color;
import java.awt.font;
import java.awt.frame;
import java.awt.graphics2d;
import java.awt.event.windowadapter;
import java.awt.event.windowevent;
import java.awt.image.bufferedimage;
import oracle.charts.axischart.axischart;
import oracle.charts.types.annotationdesc;
import oracle.charts.types.chartexception;
import oracle.charts.types.linedesc;
import oracle.charts.types.bardesc;
import oracle.charts.types.markerdesc;
import oracle.charts.types.numaxisdesc;
/**
* @author sonymusic
*
* 简单的测试了oracle chart的用法.
* 下载地址:http://otn.oracle.com/software/tech/java/servlets/content.html
*/
public class testchart1 {
//月份,其实就是x轴的标尺内容
public final static string annualdates[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12" };
//这是实际数据
public final static double p2002[] = { 1768, 1891, 1707, 1630, 1678, 1761 };
public final static double p2001[] = { 1697, 1787, 1684, 1870, 1847, 1852, 1858, 1901, 2016, 2068, 1863, 1891 };
public static void main(string[] args) {
// 嵌入图表的窗口(frame)的高和宽
int chartheight = 400;
int chartwidth = 600;
frame f = new frame();
f.addwindowlistener(new windowadapter() {
public void windowclosing(windowevent e) {
e.getwindow().dispose();
}
});
f.setsize(chartwidth + 10, chartheight + 40);
f.settitle("oracle chart测试窗口");
try {
// 创建axischart对象
axischart axisch = new axischart();
//
// 图表的高和宽
axisch.setsize(chartwidth, chartheight);
//
// 将时间戳放入x轴
axisch.setxseries(annualdates);
//
// 将价格数字插入到y轴,并有对应的名称
string y2001 = "2001年";
string y2002 = "2002年";
axisch.setyseries(y2001, p2001);
axisch.setyseries(y2002, p2002);
//
// 定义line类型的图表,并设置线条颜色宽度,标记的类型和颜色
//还可以定义其它类型,如:bardesc
linedesc ld2001 = new linedesc();
ld2001.setlinecolor(color.red);
ld2001.setmarkertype(markerdesc.marker_circle);
ld2001.setlinewidth(1);
ld2001.setmarkercolor(color.green);
linedesc ld2002 = new linedesc();
ld2002.setlinecolor(color.blue);
ld2002.setmarkertype(markerdesc.marker_diamond);
ld2002.setlinewidth(1);
ld2002.setmarkercolor(color.black);
//将两个线加到图表中去,并与名称对应上
axisch.setseriesgraphic(y2001, ld2001);
axisch.setseriesgraphic(y2002, ld2002);
//设置图表的背景色
annotationdesc ad = axisch.getannotationdesc();
ad.setforeground(color.cyan);
//设置图表y轴标尺的颜色、间隔,以及范围
numaxisdesc nad = new numaxisdesc();
nad.setcolor(color.black);
nad.setlabelincrement(100);
nad.setextent(1200, 2500);
axisch.setchartattributes(nad);
//
// 设置标题, 子标题, 和脚注. 及其字体
axisch.gettitle().settext("2002年与2001年同期现款价格比较");
axisch.gettitle().setfont(new font("宋体", font.plain, 18));
axisch.getsubtitle().settext("钢坯(单价:元/吨)");
axisch.getfootnote().settext("数据来源:销售科 时间(月)");
//
// 将图表添加到窗口中
f.add(axisch);
//还可以输出到一个outputstream中–以下的out
//以下用到了acme中的gif encode组件
/*
bufferedimage image = new bufferedimage(chartwidth, chartheight,
bufferedimage.type_int_rgb);
graphics2d g = (graphics2d) image.getgraphics();
axisch.drawbuffer(g);
gifencoder ge = new gifencoder(image, out);
ge.encode();
*/
}
catch (chartexception e) {
system.out.println(e.getmessage());
}
f.show();
}
}
