webChart,一个组件,可用于servlet/jsp或applet或applicationhttp://www.sharetop.com

解决方案 »

  1.   

    假设你建立了一个数据库,存储了大量数据。你的用户通过 Internet 或 Intranet 访问你的数据库,由用户提出查询条件(每人的查询条件都不相同),服务器根据这些条件进行查询,然后把数据提供给用户。但是,你的用户并不喜欢干巴巴的数字,他们希望在浏览器里看到彩色的图表——直方图、折线图、圆饼图。如何解决呢?  也许可以提出以下几种办法:  (1)利用服务器端的程序把查询到的数据做成图,再提供给用户。但这样一来,就大大加重了服务器的负担,访问的人一多,服务器就会不堪重负。另外,开发这样的软件也相当困难。  (2)数据下载到客户端后,通过调用 ActiveX 生成图表。这一方案实施起来较容易。但你的用户必须使用 Windows 系统和 IE 浏览器,绝无跨平台的可能。  (3)利用 Java Applet。开发很简单,用户可以使用任何 CPU 和任何操作系统。只要浏览器能够支持 Java 就可以了。  显然,这是一个非常典型的 Java Applet 应用案例。◆ Graphics 类的绘图方法drawLine(int x1, int y1, int x2, int y2); 
    drawOval(int x, int y, int width, int height); 
    drawPolygon(int xPoints[], int yPoints[], int nPoints); 
    drawRect(int x, int y, int width, int height); 
    drawRoundRect(int x,int y,int width,int height,int arcWidth,int arcHeight); 
    fill3DRect(int x, int y, int width, int height, boolean raised); 
    fillArc(int x,int y,int width,int height,int startAngle,int arcAngle); 
    fillOval(int x, int y, int width, int height); 
    fillPolygon(int xPoints[], int yPoints[], int nPoints); 
    fillRect(int x, int y, int width, int height); 
    fillRoundRect(int x,int y,int width,int height,int arcWidth,int arcHeight); 这些方法基本上一看便知:画直线、画椭圆、画多边形、画矩形、画圆角矩形等。
    fill开头的方法是在画后还要填充颜色。
    如果你想画圆,就用画椭圆的方法,让宽和高相等就行了。 ◆ 例 1.4.1 根据参数绘制直方图  这是一个简单的例子。间隔和标度都不是根据参数计算的(一个好的程序应能够自己计算这些数据,而不是生硬地指定)。下面是 HTM 文件:<html>
    <head>
    <title>bars</title>
    </head>
    <body>
    <applet code=bars.class width=350 height=250 >
     <param name=data1 value=440>
     <param name=data2 value=520>
     <param name=data3 value=400>
     <param name=data4 value=680>
     <param name=data5 value=320>
     <param name=data6 value=600>
    </applet>
    </body>
    </html>下面是 Java 文件:import java.applet.*;
    import java.awt.*;
    public class bars extends Applet
    {
      private int m_data[],i;
      public bars()
      {
      }
      public void init()
      {
        m_data=new int[6];
        for(i=1;i<=6;i++)
        {
          m_data[i-1]=Integer.parseInt(getParameter("data"+i));
        }
        setBackground(Color.yellow);
      }
      public void paint(Graphics g)
      {
        g.drawString("XX车间XX产品上半年生产进度", 90, 20);
        Color c=new Color(0x999999);
        g.setColor(c);
        g.drawRect(30,25,300,200);
        for(i=0;i<=7;i++)
        {
          g.drawLine(30,50+i*25,330,50+i*25);
          g.drawString(700-i*100+"",5,52+i*25);
        }
        g.setColor(Color.blue);
        for(i=0;i<=12;i++)
        {
          g.fillRect(50+i*50,225-m_data[i]/4,15,m_data[i]/4);
          g.drawString(m_data[i]+"",50+i*50,220-m_data[i]/4);
          g.drawString(i+1+"月",50+i*50,240);
        }
      }
    }
      

  2.   

    给你一个serverlet画饼图的原码
    import  java.io.*;
    import  java.util.*;
    import  com.sun.image.codec.jpeg.*;
    import  javax.servlet.*;
    import  javax.servlet.http.*;
    import  java.awt.*;
    import  java.awt.geom.*;
    import  java.awt.image.*;
    public  class  voteimageServlet  extends  HttpServlet  
    {
    public  void  doGet(HttpServletRequest  request,HttpServletResponse  response)
    throws  ServletException,IOException  
    {

    String strFile  =  request.getRealPath("/app/block/vote/"+request.getParameter("filename"));
            int i_init = 4;
            String []get_parameter = new String[i_init+5];
            get_parameter = getpicParameter(strFile,i_init+5);  //从文件中获得投票数         
                     
    response.setHeader("Cache-Control","no-store");
    response.setDateHeader("Expires",0);
    response.setContentType("image/jpeg");

    int imageWidth = 160;        //模板的宽度
         int imageHeight = 80;       //模板的高度
        
         int ply = 10;      //饼图的厚度
         int radius = 140;      //饼图的半径
         int x_coordinate = 10;      //饼图的X坐标
         int y_coordinate = 5;       //饼图的Y坐标
         int scale = 80;              //饼图的比例尺
         int rotation = -1;      //饼图的旋转度 
         int ini_angle = 90;      //扇形的初始角度
           
         int columns;                 //*扇形的个数    
         int col_anglesize[];       //*扇形的大小
         Color col_colors[];      //*扇形的颜色

    ServletOutputStream  out=response.getOutputStream();
    BufferedImage  image=new  BufferedImage(imageWidth,imageHeight,BufferedImage.TYPE_INT_RGB);
    Graphics g = image.getGraphics();
    //设置模板底色
         //g.setColor(Color.yellow);
    g.setColor(Color.decode("#fff2bb"));
         //设置模板大小
         g.fillRect(0,0,imageWidth,imageHeight);
        
         //获得扇形的个数 
         columns = i_init;
         col_anglesize = new int[columns];
    col_colors = new Color[columns];
         int []col_anglebegin = new int[columns];
         //获得每个扇形角度的大小     
         float []temp_anglesize = new float[columns+1];     
         float []para_anglesize = new float[columns+1];
         for(int i_tofloat=0;i_tofloat<columns;i_tofloat++ )
         { //String转换为float类型
         para_anglesize[i_tofloat] =  new  java.lang.Integer(get_parameter[i_tofloat].trim()).floatValue();
         }     
         temp_anglesize[columns] = 0;
         float temp_total_anglesize = 0;
         for(int i_anglesize=0;i_anglesize<columns;i_anglesize++)
         {
         temp_total_anglesize = temp_total_anglesize+para_anglesize[i_anglesize];     
         }     
         for(int j_anglesize=0;j_anglesize<columns-1;j_anglesize++)     
         {
         if(temp_total_anglesize<=0){ break; }
         temp_anglesize[j_anglesize] = (360*para_anglesize[j_anglesize])/temp_total_anglesize;
         col_anglesize[j_anglesize] = (int)temp_anglesize[j_anglesize];
         temp_anglesize[columns] = temp_anglesize[columns] + col_anglesize[j_anglesize];
         }          
         col_anglesize[columns-1] = (int)(360 - temp_anglesize[columns]);
         if(temp_total_anglesize<=0)
         {
         for(int k_anglesize=0;k_anglesize<columns;k_anglesize++)
         {
         col_anglesize[k_anglesize] = 0;     
         }     
         }
         //获得每个扇形的初始角度
         ini_angle = col_anglebegin[0];
         for (int i_angle=1;i_angle<columns;i_angle++)
         {
         col_anglebegin[i_angle] = ini_angle + col_anglesize[i_angle-1];   
         ini_angle = col_anglebegin[i_angle];
         }    
        
         //获得每个扇形的颜色
         for(int i_color=0,j_color=5;i_color<columns;i_color++,j_color++)
         {
         if(get_parameter[j_color].equals("red")){ col_colors[i_color] = Color.red;     }
         else if(get_parameter[j_color].equals("green"))   { col_colors[i_color] = Color.green;   }
         else if(get_parameter[j_color].equals("black"))   { col_colors[i_color] = Color.black;   }
         else if(get_parameter[j_color].equals("pink"))    { col_colors[i_color] = Color.pink;    }
         else if(get_parameter[j_color].equals("orange"))  { col_colors[i_color] = Color.orange;  }
         else if(get_parameter[j_color].equals("magenta")) { col_colors[i_color] = Color.magenta; }
         else if(get_parameter[j_color].equals("cyan"))    { col_colors[i_color] = Color.cyan;    }
         else if(get_parameter[j_color].equals("white"))   { col_colors[i_color] = Color.white;   }
         else if(get_parameter[j_color].equals("yellow"))  { col_colors[i_color] = Color.yellow;  }
         else if(get_parameter[j_color].equals("blue"))    { col_colors[i_color] = Color.blue;    }
         else if(get_parameter[j_color].equals("gray"))    { col_colors[i_color] = Color.gray;    }
         else if(get_parameter[j_color].equals("darkGray")){ col_colors[i_color] = Color.darkGray;}
         else { col_colors[i_color] = Color.gray; }
         }
        
        
         g.setColor(Color.red);
         Font f = new Font("TimesRoman",Font.BOLD,20);
         g.setFont(f);    
    for(int i_columns=0;i_columns<columns;i_columns++)
    {
    g.setColor((Color)((col_colors[i_columns]).darker()));    
    for(int i_ply=0;i_ply<ply;i_ply++)
    {
    g.drawArc(x_coordinate, y_coordinate+i_ply, radius, (int)((radius*45)/100) , col_anglebegin[i_columns], col_anglesize[i_columns]);
    }
    }
    for(int i_fillcolumns = 0;i_fillcolumns<columns;i_fillcolumns++ )
    {
    g.setColor((Color)col_colors[i_fillcolumns]);
    g.fillArc(x_coordinate, y_coordinate, radius, (int)((radius*45)/100), col_anglebegin[i_fillcolumns], col_anglesize[i_fillcolumns]);
    }
            
    JPEGImageEncoder  encoder=JPEGCodec.createJPEGEncoder(out);
    encoder.encode(image);
    out.close();
    }
    public  void  doPost(HttpServletRequest  request,HttpServletResponse  response)
    throws  ServletException,IOException  
    {
    doGet(request,response);
    }
    private  String[]  getpicParameter(String  s,int para_init)
    {
    String[]  strP  =  new  String[para_init];
    String  strTemp  =  null;
    int  i;
    java.io.RandomAccessFile  rf  =  null;
    try
    {
    rf  =  new  java.io.RandomAccessFile(s,"r");
    }
    catch(Exception  e)
    {
    System.out.println(e);
    System.exit(0);
    }
    for(i=0;i<para_init;i++)  
    {
    try
    {
    strTemp  =  rf.readLine();
    }
    catch(Exception  e)
    {
    strTemp  =  "err_get";
    }
    if(strTemp==null)strTemp  = "err_get";
    strP[i]  =  strTemp;
    }
    return  strP;
    }
    }
      

  3.   

    RChart: http://rreport.8m.com/charts_e.htm