Java 示例 - 显示饼图

  • 问题描述

    如何使用框架显示饼图?
  • 解决方案

    以下示例显示了如何通过制作 Slices 类并根据切片创建弧来显示饼图。
    
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Rectangle;
    import javax.swing.JComponent;
    import javax.swing.JFrame;
    class Slice {
       double value;
       Color color;
       public Slice(double value, Color color) {  
          this.value = value;
          this.color = color;
       }
    }
    class MyComponent extends JComponent {
       Slice[] slices = { 
          new Slice(5, Color.black), new Slice(33, Color.green), new Slice(20, Color.yellow), new Slice(15, Color.red) 
       };
       MyComponent() {}
       public void paint(Graphics g) {
          drawPie((Graphics2D) g, getBounds(), slices);
       }
       void drawPie(Graphics2D g, Rectangle area, Slice[] slices) {
          double total = 0.0D;
          
          for (int i = 0; i < slices.length; i++) {
             total += slices[i].value;
          }
          double curValue = 0.0D;
          int startAngle = 0;
          for (int i = 0; i < slices.length; i++) {
             startAngle = (int) (curValue * 360 / total);
             int arcAngle = (int) (slices[i].value * 360 / total);
             g.setColor(slices[i].color);
             g.fillArc(area.x, area.y, area.width, area.height, startAngle, arcAngle);
             curValue += slices[i].value;
          }
       }
    }
    public class Main {
       public static void main(String[] argv) {
          JFrame frame = new JFrame();
          frame.getContentPane().add(new MyComponent());
          frame.setSize(300, 200);
          frame.setVisible(true);
       }
    }
    
  • 结果

    上面的代码示例将产生以下结果。
    
    Displays a piechart in a frame.
    
    以下是使用框架显示饼图的示例。
    
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Rectangle;
    import javax.swing.JComponent;
    import javax.swing.JFrame;
    class Part {
       double value;
       Color color;
       
       public Part(double value, Color color) {
          this.value = value;
          this.color = color;
       }
    }
    class MyComponent extends JComponent {
       Part[] slices = { 
          new Part(15, Color.yellow), new Part(30, Color.white), new Part(25, Color.blue), new Part(30, Color.red) 
       }; 
       MyComponent() {
       }
       public void paint(Graphics g) {
          drawPie((Graphics2D) g, getBounds(), slices);
       } 
       void drawPie(Graphics2D g, Rectangle area, Part[] slices) {
          double total = 0.0D;
          for (int i = 0; i < slices.length; i++) {
             total += slices[i].value;
          } 
          double curValue = 0.0D;
          int startAngle = 0;
          for (int i = 0; i < slices.length; i++) {
             startAngle = (int) (curValue * 360 / total);
             int arcAngle = (int) (slices[i].value * 360 / total);
             
             g.setColor(slices[i].color);
             g.fillArc(area.x, area.y, area.width, area.height, startAngle, arcAngle);
             curValue += slices[i].value;
          } 
       }
    }
    public class Panel {
       public static void main(String[] argv) {
          JFrame frame = new JFrame();
          frame.getContentPane().add(new MyComponent());
          frame.setSize(300, 200);
          frame.setVisible(true);
       }
    }