把你的要求说的具体点,我这两天正好也在处理类似的问题,只不过不是在applet上,而是在jsp页面上输出。你是需要知道如何在applet上显示chart还是画走逝图的算法,请说具体点。

解决方案 »

  1.   

    http://www2.ccw.com.cn/tips/2k01/012703_07a.asp
    顺便感谢一下大富翁的sonymusic,如果他看这里的话
      

  2.   

    万分感谢kks(峰),garlic11(她要嫁人了)
    to garlic11(她要嫁人了):不知你是怎么做的,望赐教!
      

  3.   

    传上一段代码,是生成折线图和直方土图的算法,希望是你需要的。这段代码还不完善,而且注释也没有写全,要读明白它可能要花点时间。如果对你有用处,你最好先仔细测试一下再用。这个方法的功能是根据输入的参数画出图表
    参数说明:
    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);
            }
            
        }