一個簡單的繪制餅圖的 Java Bean 實例

fwe3 9年前發布 | 1K 次閱讀 Java

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>

 本文由用戶 fwe3 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!