Please visit our sponsor
UNKNOWN
//**************************************
// Name: Java Pie Chart
// Description:Just a cool pie chart... VOTE FOR ME ANYWAYS, please! :)
// By: Mike McNaughton
//
//
// Inputs:None
//
// Returns:None
//
//Assumes:None
//
//Side Effects:None
//This code is copyrighted and has limited warranties.
//Please see http://www.Planet-Source-Code.com/xq/ASP/txtCodeId.2085/lngWId.2/qx/vb/scripts/ShowCode.htm
//for details.
//**************************************
/* 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= 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 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 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