一個簡單的繪制餅圖的 Java Bean 實例
import java.awt.*;/**
- Simple charting bean. This version just draws a Pie Chart. *
- It doesn't even label the pie slices; that is left as a
- (non-trivial) exercise for the reader. Please read the
- Technical Report "How Hard can it be to draw Pie Charts?" by Chris
- van Wyck, Purdue/Bell Labs, 1989??, before you decide how easy
the work is going to be! */ public class ChartBean extends Component {
/* The title to print on the chart / protected String title;
/* the data to draw / protected ChartData data[];
/* degrees in a circle / public static final int CIRCLE = 360;
/* a set of colors to draw the pies in / protected Color[] colors = { Color.red, Color.blue, Color.green, Color.pink, Color.orange };
/ Construct a ChartBean with a title */ public ChartBean(String s) { title = s; setBackground(Color.white); } / Construct a ChartBean with no title (no-arg constructor
- required for Beans). */ public ChartBean() { this(null); }
public void setLabel(String s) { title = s; }
public String getLabel() { return title; } public void setData(ChartData[] newStuff) { data = newStuff; repaint(); }
public void paint(Graphics g) { Dimension sz = getSize(); int w = sz.width, h = sz.width;
if (title != null)
g.drawString(title, w/10, (int)(h*.9));
if (data == null || data.length == 0) {
g.drawOval(0, 0, w, h); g.drawString("Please provide some data!", w/10, h/2); return;
}
int total = 0; int angle = 0; int rad = 0; // "radians" (actually degrees) to draw int colNum = 0;
for (int i=0; i<data.length; i++)
total += data[i].value;
for (int i=0; i<data.length; i++) {
rad = (int)(CIRCLE * ((float)data[i].value / (float)total)); // System.out.println("data: "+data[i].name+";"+data[i].value+ // ",rad="+rad); g.setColor(colors[colNum++]); colNum%=colors.length; // keep it in bounds g.fillArc(0, 0, w, h, angle, rad); angle += rad;
} }
public Dimension getMinimumSize() { return new Dimension(100, 120); } public Dimension getPreferredSize() { return new Dimension(200, 240); } }</pre>