Java如何在框架中显示饼图?

在Java的GUI编程中,如何在框架中显示饼图?

以下示例显示如何通过根据切片使Slices类和创建弧来显示饼图。

package com.zaixian;

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 MyComponent2 extends JComponent {
    Slice[] slices = { new Slice(5, Color.black), new Slice(33, Color.green), new Slice(20, Color.yellow),
            new Slice(15, Color.red) };

    MyComponent2() {
    }

    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 DisplayPieChart {
    public static void main(String[] argv) {
        JFrame frame = new JFrame();
        frame.getContentPane().add(new MyComponent2());
        frame.setSize(300, 200);
        frame.setVisible(true);
    }
}

上述代码示例将产生以下结果。

示例-2

以下是在框架中显示饼图的另一个示例。

package com.zaixian;

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 Part2 {
    double value;
    Color color;

    public Part2(double value, Color color) {
        this.value = value;
        this.color = color;
    }
}

class MyComponent3 extends JComponent {
    Part2[] slices = { new Part2(15, Color.yellow), new Part2(30, Color.white), new Part2(25, Color.blue),
            new Part2(30, Color.red) };

    MyComponent3() {
    }

    public void paint(Graphics g) {
        drawPie((Graphics2D) g, getBounds(), slices);
    }

    void drawPie(Graphics2D g, Rectangle area, Part2[] 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 DisplayPieChart2 {
    public static void main(String[] argv) {
        JFrame frame = new JFrame();
        frame.getContentPane().add(new MyComponent3());
        frame.setSize(300, 200);
        frame.setVisible(true);
    }
}

上述代码示例将产生以下结果。


上一篇: Java简单GUI实例 下一篇: Java JDBC