⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 samplinggraphic.java

📁 java EJB 编程源代码。
💻 JAVA
字号:
/* 这个Servlet程序用来生成JPEG图片 */

import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.awt.*;
import java.awt.geom.*;
import java.awt.image.*;
import com.sun.image.codec.jpeg.*;

public class SamplingGraphic extends HttpServlet
  {
   float[] samplingTimes = new float[4];        // 用以存放样本被抽取的次数
   float[] samplingPrecent = new float[4];      // 存放抽取的概率
   int samplingTotTimes = 0;                    // 用于存放总的抽样次数
   int i = 0;

   public void doPost(HttpServletRequest rq,HttpServletResponse rp)
     {
      try
        {
         doGet(rq,rp);
        }
      catch(Exception e)
        {
         System.out.println(e.toString());
        }
     }

   public void doGet(HttpServletRequest rq,HttpServletResponse rp)
     {
      String remark = null;
      Color color[]={Color.magenta,Color.orange,Color.blue,Color.green};
      int baseAng = 30;
      int totalAng = 0;
      int[] ang = new int[4];
      int totalang = 0;
      ServletOutputStream out = null;
      BufferedImage image = null;
      Graphics2D g = null;
      AffineTransform at = null;
      Arc2D arc = null;
      JPEGImageEncoder encoder = null;
      int fromAng = -1;
      int r = 6;
      int dx = -1;
      int dy = -1;

      try
        {
         getSamplingTimes();    // 读取取抽样的次数
         getSamplingPrecent();  // 计算被抽中的概率

         for(i = 0;i < samplingPrecent.length - 1;i++)
           {
            /* 按照比例计算角度 */

            ang[i] = (int)(samplingPrecent[i] * 360);
            totalang = totalang + ang[i];
           }
         ang[samplingPrecent.length - 1] = 360 - totalang;

         rp.setContentType("image/jpeg");       // 定义Servlet的输出格式为JPEG的图象文件格式
         out = rp.getOutputStream();            // 定义Servlet的输出流            

         /* 以下是开始利用JAVA 2D中的方法(函数)作图,*/
         /* 利用不同的颜色和圆弧的大小表示百分比数 */

         image = new BufferedImage(150,100,BufferedImage.TYPE_INT_RGB);
         g = (Graphics2D)image.getGraphics();
         g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
         g.setColor(Color.white);
         g.fillRect(0,0,150,100);
         fromAng = baseAng;
         at = AffineTransform.getRotateInstance((-20 * Math.PI) / 180,45,37);
         g.setTransform(at);
         dx = (int)(r * Math.cos((baseAng + ang[0]) / 2.0 * Math.PI / 180));
         dy = (int)(r * Math.sin((baseAng + ang[0]) / 2.0 * Math.PI / 180));
         arc = new Arc2D.Double(10 + dx,24 - dy,80,50,fromAng,ang[0],Arc2D.PIE);
         g.setColor(color[0]);
         g.fill(arc);
         fromAng = fromAng + ang[0];

         for(i = 1;i < ang.length;i++)
           {
            g.setColor(color[i]);
            arc = new Arc2D.Double(10,24,80,50,fromAng,ang[i],Arc2D.PIE);
            g.fill(arc);
            fromAng = fromAng + ang[i];
            if(fromAng > 360)
              {
               fromAng = fromAng - 360;
              }
           }

         at = AffineTransform.getRotateInstance(0,arc.getCenterX(),arc.getCenterY());
         g.setTransform(at);

         for(i = 0;i < ang.length;i++)
           {
	    /* 打印标注和文字注解 */

	    g.setColor(color[i]);
            g.fillRect(100,15 * i + 20,5,5);
            remark = String.valueOf(new Float(samplingPrecent[i] * 100).intValue()) + "%";
            g.drawString(remark,110,15 * i + 20 + 8);
           }

         encoder = JPEGCodec.createJPEGEncoder(out);
         encoder.encode(image);
         out.close();
        }
      catch(Exception e)
        {
         System.out.println(e);
        }
     }

   public void getSamplingPrecent()
     {
      /* 本方法是计算抽到的概率 */

      if(samplingTotTimes == 0)
        {
         samplingTotTimes = 1;
        }
      for(i = 0;i < samplingTimes.length;i++)
        {
         samplingPrecent[i] = samplingTimes[i] / samplingTotTimes;
        }
     }

   public void getSamplingTimes()
     {
      /* 本方法用来读取保存的抽样次数 */

      String getFileRec = null;
      String Samplingresultfilename = null;
      BufferedReader file = null;
      StringTokenizer st = null;
      Samplingresultfilename = "C:\\jswdk-1.0.1\\webpages\\sampling\\samplingResult.inc";

      try
        {
         /* 首先从文件中读出数据 */

         file = new BufferedReader(new FileReader(Samplingresultfilename));
         getFileRec = file.readLine();

         if (getFileRec == null)
           {
            for(i = 0;i < samplingTimes.length;i++)
              {
               samplingTimes[i] = 0;
              }
           }
         else
           {
            /* 然后,将数据按照“|”分割符分割开来并且存入数组 */

            st = new StringTokenizer(getFileRec,"|");
            samplingTotTimes = Integer.parseInt(st.nextToken().trim());
            for(i = 0;i < samplingTimes.length;i++)
              {
               samplingTimes[i] = Integer.parseInt(st.nextToken().trim());
              }
           }
        }
      catch(Exception e)
        {
         System.out.println("读取数据错误" + e.toString());
        }
     }
  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -