一个简单的绘制饼图的 Java Bean 实例
2018-07-20 来源:open-open
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);
}
}
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。
最新资讯
热门推荐