把你的要求说的具体点,我这两天正好也在处理类似的问题,只不过不是在applet上,而是在jsp页面上输出。你是需要知道如何在applet上显示chart还是画走逝图的算法,请说具体点。
解决方案 »
- TreeSet判断元素重复的问题
- 文件过滤FilenameFilter
- 求助
- 新人求教一个关于线程的问题~~
- [新手提问]关于空引用异常 (昨天那个"io流复制文件贴"续)
- 这段正则什么意思
- 急,与SQL server数据库连接不上.请高手帮忙!
- 求求大家帮忙解决tomcat的问题,急啊。。。
- 求教:如何在JWindow上显示滚动字幕
- 心情不好 散分啦
- 请教各位大哥,小弟感激不尽!
- 急!急!请教:我把applet中的.class文件放在和网页同一目录下,然后用<applet width="487" height="273" code="pic.class">引用,为什么浏览网页时他说class pic not found?
顺便感谢一下大富翁的sonymusic,如果他看这里的话
to garlic11(她要嫁人了):不知你是怎么做的,望赐教!
参数说明:
type —— 图表类型,1表示画折线图,2表示画直方图。
data —— 传入的数据,可能是一维数组,也可能是二维数组,一维数组表示只有一种数据需要图表显示,如果是二维数组就表示有两种以上的数据需要显示。
color —— data对象中的数据对应的颜色。
description —— data对象中数据对应的描述。
dimension —— 传入的data对象的维数
maxvalue —— Y坐标上的最大值
val_unit —— Y坐标上的数据的单位 private void drawChart(int type,Object data,Color[] color,String[] description,int dimension,long maxvalue,String val_unit){ //定义图片的尺寸
final int IMAGE_WIDTH = 500;
final int IMAGE_HEIGHT = 315;
//定义坐标的位置和单位宽度
final int X_BEGIN = 40;
final int X_END = 472;
final int Y_BEGIN = 295;
final int Y_END = 20;
final int SHORT_LINE = 1;
int x_step = (X_END-X_BEGIN)/24;
int y_step = (Y_BEGIN-Y_END)/11;
int x_val_pos = 0;
int y_val_pos = Y_BEGIN + 10;
//定义箭头的位置
int [] arrowx1 = new int[3];
int [] arrowy1 = new int[3];
int [] arrowx2 = new int[3];
int [] arrowy2 = new int[3];
//X轴的箭头
arrowx1[0] = X_END;
arrowx1[1] = X_END - 5;
arrowx1[2] = X_END - 5;
arrowy1[0] = Y_BEGIN;
arrowy1[1] = Y_BEGIN - 5;
arrowy1[2] = Y_BEGIN + 5;
//Y轴的箭头
arrowx2[0] = X_BEGIN;
arrowx2[1] = X_BEGIN - 5;
arrowx2[2] = X_BEGIN + 5;
arrowy2[0] = Y_END;
arrowy2[1] = Y_END + 5;
arrowy2[2] = Y_END + 5;
//获取graphics对象
this.image = new BufferedImage(IMAGE_WIDTH,IMAGE_HEIGHT, BufferedImage.TYPE_INT_RGB);
Graphics graphics = this.image.getGraphics();
graphics.setColor(Color.white);
graphics.fillRect(0,0,IMAGE_WIDTH,IMAGE_HEIGHT);
//画坐标
graphics.setColor(Color.black);
graphics.fillPolygon(arrowx1,arrowy1,3);
graphics.fillPolygon(arrowx2,arrowy2,3);
graphics.drawLine(X_BEGIN,Y_BEGIN,X_BEGIN,Y_END);
graphics.drawLine(X_BEGIN,Y_BEGIN,X_END,Y_BEGIN);
graphics.setColor(Color.cyan);
graphics.drawString("hour",X_END,y_val_pos);
//画X轴上的刻度
graphics.setColor(Color.black);
for (int i = X_BEGIN;i < X_END;i += x_step){
graphics.drawLine(i,Y_BEGIN,i,Y_BEGIN-SHORT_LINE);
graphics.drawString(""+(i-X_BEGIN)/x_step,i,y_val_pos);
}
//画Y轴上的刻度
for (int i = Y_BEGIN;i > Y_END;i -= y_step){
graphics.setColor(Color.lightGray);
if (i != Y_BEGIN){
graphics.drawLine(X_BEGIN,i,X_END,i);
}
graphics.setColor(Color.black);
graphics.drawString(""+Math.round((Y_BEGIN-i)*maxvalue/(y_step*10))+val_unit,x_val_pos,i);
}
//draw line chart
switch (type){
case 1://line //定义折画折线图方法的输入参数
int pointX[] = new int[24];
int pointY[] = new int[24];
//get data from data object
for (int i = 0;i < dimension;i++){
int[] value;
if (dimension > 1){//data是二维数组
value =((int[][])data)[i];
}else{//data是一维数组
value = (int[])data;
}
//画出折线图
for (int j = 0;j < value.length;j++){
pointX[j] = X_BEGIN + j*x_step;
pointY[j] = Y_BEGIN - (int)(value[j]*(y_step*10)/maxvalue);
graphics.setColor(Color.red);
graphics.fillOval(pointX[j]-2,pointY[j]-2,5,5);
}
graphics.setColor(color[i]);
graphics.drawPolyline(pointX,pointY,value.length);
}
break;
case 2://直方图
int rect_width = (x_step-8)/dimension;//定义每个矩形的宽度
//get data from data object
for (int i = 0;i < dimension;i++){
int[] value;
if (dimension > 1){//data是二维数组
value =((int[][])data)[i];
}else{data是一维数组
value = (int[])data;
}
graphics.setColor(color[i]);
//画出直方图
for (int j = 0;j < value.length;j++){
graphics.fillRect(X_BEGIN + j*x_step + rect_width*i,
(int)(Y_BEGIN - (int)(value[j]*(y_step*10))/maxvalue),
rect_width,
(int)(value[j]*(y_step*10)/maxvalue));
}
}
break;
}
//画出图表的颜色说明
int frmX = X_END-100;
int frmY = 5;
for (int i = 0;i < dimension;i++){
graphics.setColor(color[i]);
graphics.fillRect(frmX,frmY+5+i*12,7,7);
graphics.setColor(Color.gray);
graphics.drawString(description[i],frmX+17,frmY+(i+1)*12);
}
}