Advertisement
ASP_Volume2 Applet #39652

Java Pie Chart

Just a cool pie chart... VOTE FOR ME ANYWAYS, please! :)

AI

KI-Zusammenfassung: This codebase represents a historical implementation of the logic described in the metadata. Our preservation engine analyzes the structure to provide context for modern developers.

Quellcode
original-source
/* Pie chart Applet */
/* This program is in the public domain. 
*/
import java.awt.*;
import java.applet.*;
import java.util.*;
import java.lang.Math;
// ================================================================
// A struct class to hold data for one wedge
class PieItem {
 public double frac; // each one has a number
 public String label; // and a label
 PieItem (String s) { // constructor
  StringTokenizer t = new StringTokenizer(s, ",");
  frac = Double.valueOf(t.nextToken()).doubleValue();
  label = t.nextToken();
 } // constructor
} // PieItem
//The view of the pie.
class PieView extends Canvas {
 PieItem[] wedges; // The data for the pie
 double total = 0.0; // Total of all wedges
 static final int ncolors = 5;
 Color wedgeColor[] = new Color[5];
 int pieViewSize; // size of square to incise pie into
 static final int pieBorderWidth = 10; // pixels from circle edge to side
 int pieDiameter; // derived from the view size
 int pieRadius; // ..
 int pieCenterPos; // ..
 
 public PieView(int asize, PieItem[] avec) { // constructor
  this.pieViewSize = asize; // copy args
  this.wedges = avec;
  pieDiameter = pieViewSize-2*pieBorderWidth;
  pieRadius = pieDiameter/2;
  pieCenterPos = pieBorderWidth+pieRadius;
  this.setFont(new Font("Helvetica",Font.BOLD,12));
  this.setBackground(Color.white);
  for (int i = 0; i<wedges.length; i++) {
   total += wedges[i].frac;
  }
  wedgeColor[0] = Color.green; // colors that black looks good on
  wedgeColor[1] = Color.pink;
  wedgeColor[2] = Color.cyan;
  wedgeColor[3] = Color.red;
  wedgeColor[4] = Color.yellow;
 } // constructor
 public void paint(Graphics g) {
  int startDeg = 0;
  int arcDeg;
  int x, y;
  double angleRad;
  g.setColor(Color.lightGray); // shadow
  g.fillOval(pieBorderWidth+3,pieBorderWidth+3,pieDiameter,pieDiameter);
  g.setColor(Color.gray); // "other" is gray
  g.fillOval(pieBorderWidth,pieBorderWidth,pieDiameter,pieDiameter);
  
  int wci = 0;
  int i;
  for (i = 0; i<this.wedges.length; i++) { // draw wedges
   arcDeg = (int)((this.wedges[i].frac / total) * 360);
   g.setColor(wedgeColor[wci++]);
   g.fillArc(pieBorderWidth,pieBorderWidth,pieDiameter,pieDiameter,
		startDeg, arcDeg);
   if (wci >= ncolors) {
	wci = 0; // rotate colors
   }
   startDeg += arcDeg;
  } // draw wedges
  startDeg = 0; // Do labels so they go on top of the wedges.
  for (i = 0; i<this.wedges.length; i++) {
   arcDeg = (int)((this.wedges[i].frac / total) * 360);
   if (arcDeg > 3) { // don't label small wedges
	g.setColor(Color.black);
	angleRad = (float) (startDeg+(arcDeg/2))* java.lang.Math.PI / 180.0;
	x = pieCenterPos + (int)((pieRadius/1.3)*java.lang.Math.cos(angleRad));
	y = pieCenterPos - (int)((pieRadius/1.3)*java.lang.Math.sin(angleRad))
      + 5; // 5 is about half the height of the text
	g.drawString(this.wedges[i].label, x, y);
   } // don't label small wedges
   startDeg += arcDeg;
  } // for
 } // paint()
 public Dimension preferredSize () {
  return new Dimension (pieViewSize,pieViewSize);
 } // preferredSize
 
} // PieView
// ================================================================
// The Pie chart applet
public class Pie extends Applet {
 private PieView the_pie = null;
 public Pie() { // constructor
  // Nothing happens here, can't get args yet.
 } // constructor
 public void init () {
  String stemp;
  double dtemp;
  int i;
  // Read the applet arguments
  stemp = this.getParameter("title");
  String chartTitle = (stemp == null) ? "" : stemp;
  stemp = this.getParameter("subtitle");
  String chartSubTitle = (stemp == null) ? "" : stemp;
  int nargs = 0;
  while (this.getParameter("arg"+nargs) != null) {
   nargs++; // just count the arguments
  } // while
  PieItem[] v = new PieItem[nargs]; // allocate storage
  for (i=0; i<nargs; i++) {
   v[i] = new PieItem(getParameter("arg"+i)); // parse argument
  } // for
  int d = (i+1)/2; // Shell sort
  do {
   for (i=0; i < nargs-d; i++) {
	if (v[i].frac < v[i+d].frac) {
	 dtemp = v[i].frac; // swap
	 v[i].frac = v[i+d].frac;
	 v[i+d].frac = dtemp;
	 stemp = v[i].label;
	 v[i].label = v[i+d].label;
	 v[i+d].label = stemp;
	}
   } // for
   d -= 1;
  } while (d > 0);
  int h = this.size().height;
  int w = this.size().width;
  the_pie = new PieView(h-50, v); // shd be min(h-50,w)?
  this.setLayout(new BorderLayout(0,0));
  this.setBackground(Color.white);
  this.add("Center", the_pie);
  this.add("North", new Label(chartTitle));
  this.add("South", new Label(chartSubTitle));
 } // init
 // Boiler plate for HotJava
 public String getAppletInfo () {
  return "Pie 1997-06-14 THVV";
 } // getAppletInfo
 public String [][] getParameterInfo () {
  String [][] info = {
  };
  return info;
 } // getParameterInfo
 // Main program for testing only.
 public static void main(String args[]) {
  Frame f = new Frame("Pie");
  Pie p = new Pie();
  p.init();
  p.start();
  f.add("Center",p);
  f.resize(512,512);
  f.show();
 } // main
} // Pie
Originalkommentare (3)
Wiederhergestellt von der Wayback Machine