| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
fwe3
10年前发布

一个简单的绘制饼图的 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);     }  }