极光下载站 - 打造齐全的绿色软件家园

极光下载站

当前位置: 首页 技术开发 JSP专区 - Draw a pie chart

- Draw a pie chart

时间:2006/7/19 5:47:38 作者:佚名 人气:67

 import java.util.*;
import java.awt.*;
import java.applet.Applet;

public class Graph extends Applet {
intdepth, radius;

public void init() {
 float value;
 String at = getParameter("width");
 radius = (at != null) ?Integer.valueOf(at).intValue() : 100;
 at = getParameter("depth");
 depth = (at != null) ? Integer.valueOf(at).intValue() : 20;
 at = getParameter("values");
 PieChartCanvas c = new PieChartCanvas(radius, depth);
 setLayout(new BorderLayout());

 // Create Hashtable to map color name (String) to Color type
 Hashtable colors = new Hashtable();
 colors.put("green", Color.green);
 colors.put("red", Color.red);
 colors.put("blue", Color.blue);
 colors.put("yellow", Color.yellow);
 colors.put("magenta", Color.magenta);
 colors.put("cyan", Color.cyan);
 colors.put("orange", Color.orange);
 colors.put("pink", Color.pink);
 colors.put("white", Color.white);
 colors.put("black", Color.black);

 // "value-color,value-color,..."
 StringTokenizer t = new StringTokenizer(at, ",");
 String s;
 int i;
 while (t.hasMoreTokens()) {
 s = t.nextToken();
 i = s.indexOf('-');
 value = Float.valueOf(s.substring(0, i)).floatValue();
 c.addSlice(value, (Color)colors.get(s.substring(i + 1)));
}

 resize(c.getMinimumSize().width, c.getMinimumSize().height);
 add("Center", c);
 }
}

class PieChartCanvas extends Canvas {
 /*
 ** author Ciaran Treanorciaran@broadcom.ie
 */
 final double aspectFudge = 2.5;
 int radius, depth, called = 1, numSlices = 0;
 float total = 0, value[] = new float[10];
 Color color[] = new Color[10];
 Graphics offGraphics;
 Image gfxBuff;

 public PieChartCanvas(int radius, int depth) {
 this.value = value;
 this.color = color;
 this.radius = radius;
 this.depth = depth;
 }

 public void paint(Graphics g) {
 int startAngle;
 float angle;
 Dimension d = getSize();

 if(gfxBuff == null) {
 gfxBuff = createImage(d.width, d.height);
 offGraphics = gfxBuff.getGraphics();
 offGraphics.setColor(getBackground());
 offGraphics.fillRect(0, 0, d.width, d.height);
 }

 // do the 3d effect
 for(int x = depth; x >= 1; x--) {
 startAngle = -45;
 for(int i = 0; i < numSlices; i++) {
 offGraphics.setColor(color[i].darker());
 angle = Math.round(360 * (value[i] / total));
 offGraphics.fillArc(0, x, radius, (int)(radius / aspectFudge),
 startAngle, (int)angle);
 startAngle += angle;
 }
 }

 // draw the pie slice
 startAngle = -45;
 for(int i = 0; i < numSlices; i++) {
 offGraphics.setColor(color[i]);
 angle = Math.round(360 * (value[i] / total));
 offGraphics.fillArc(0, 0, radius, (int)(radius / aspectFudge),
startAngle, (int)angle);
startAngle += angle;
 }
 g.drawImage(gfxBuff, 0, 0, null);
 }

 public void addSlice(float value, Color color) {
 this.value[numSlices] = value;
 this.color[numSlices++] = color;
 total += value;
 }

 public Dimension getPreferredSize() {
 return getMinimumSize();
 }

 public Dimension getMinimumSize() {
 return new Dimension(radius, (int)((radius / aspectFudge) + depth));
 }
 }




[JavaPie.hmtl]
<HTML>
<APPLET CODE=Graph.class WIDTH=150 HEIGHT=150>
 <PARAM NAME="depth"VALUE="30">
 <PARAM NAME="width"VALUE="120">
 <PARAM NAME="values" VALUE="1-red,2-green,3-blue">
</APPLET>
</HMTL>

<
标签
分享到:

公众号