0

我对 Java 还很陌生,并且使用的是 NetBeans IDE 7.0.1。

问题:
我正在尝试完成一个需要饼图的Java 小程序。我已经实现了饼图,但我无法让文本标​​签出现在图例中的数据旁边。有没有人有任何指示?

package piechartapplet;


import javax.swing.*;
import java.awt.*;


public class PieChartApplet extends JApplet {

    int TotalPieChartSlices = 7;
    SliceValues[] pieSlice = new SliceValues[TotalPieChartSlices];
    private int pieChartValueY;

    public PieChartApplet() 
    {
//Source for input statisctics:
//Global Issues. (2012). World Military Spending. Retrieved from http://www.globalissues.org/article/75/world-military-spending             
// Link:  http://www.globalissues.org/article/75/world-military-spending

    pieSlice[0] = new SliceValues(41.0, Color.RED,"United States");
    pieSlice[1] = new SliceValues(8.2, Color.CYAN,"China");
    pieSlice[2] = new SliceValues(4.1, Color.GREEN,"Russia");
    pieSlice[3] = new SliceValues(3.6, Color.BLUE,"UK");
    pieSlice[4] = new SliceValues(3.6, Color.PINK,"France");
    pieSlice[5] = new SliceValues(21.3, Color.ORANGE,"Next 10 Countries Combined");
    pieSlice[6] = new SliceValues(18.2, Color.LIGHT_GRAY,"Rest of the World");

}

// drawing the pir chart using the values in the array
    public int drawPieChartValues(Graphics2D graphics, Rectangle pieChartArea, SliceValues[] pieSlice)
    {
    // setting font size/style
        Font font = new Font("Arial", Font.BOLD, 24);
        graphics.setFont(font);
// Title of Pie Chart
        graphics.drawString("World Military Spending (% by Country)", 20, 20);
        graphics.setFont(font);
// establishing inital area positioning
        pieChartArea.x=10;
        pieChartArea.y = 30;
// using the array values, rectangles, and color to draw the slices
        for(int i=0; i<pieSlice.length;i++)
        {
            graphics. setColor(pieSlice[i].getSliceColor());
            graphics.fillRect(pieChartArea.x, pieChartArea.y, 15, 10);
            graphics.setColor(Color.BLACK);
            pieChartArea.y+=20;
            graphics.drawString(""+pieSlice[i].getSliceValue(), pieChartArea.x+25, pieChartArea.y-10);
        }
        return pieChartArea.y+=10;
    }

//The code below was adapted from an example I found that enables me to pull from
// the array and use the values as the slice sizes, putting them into a 360* pie
// Walker, K. (2012). How to Draw a Pie Chart in Java. Retrieved from http://www.ehow.com/how_6647263_draw-pie-chart-java.html 


    public void drawPieChart(Graphics2D graphics, Rectangle pieChartArea, SliceValues[] pieSlice) {

// pulling array data for the individual slices
        double total = 0.0;
        for (int i=0; i<pieSlice.length; i++) 
        {
            total += pieSlice[i].getSliceValue(); //pulling value
        }
    // drawing the slice and positioning it accordingly
        double slice = 0.0D;
        int StartAngle = 0;
        pieChartArea.x = 20;
        for (int i=0; i<pieSlice.length; i++) {

// finding initial and final angels
            StartAngle = (int)(slice * 360 / total);
            int finalAngle = (int)(pieSlice[i].getSliceValue() * 360 / total);
//loop for last slice
            if (i == pieSlice.length-1) 
                        {
                finalAngle = 360 - StartAngle;
            }
// Pulling color from array and setting accordingly
        graphics.setColor(pieSlice[i].getSliceColor()); //pulling color
        // drawing pie piece
                graphics.fillArc(pieChartArea.x, pieChartValueY, pieChartArea.width/2, pieChartArea.height/2, StartAngle, finalAngle);

        slice += pieSlice[i].getSliceValue();
        }
    }
    public void paint(Graphics g) 
    {
        super.paint(g);
        pieChartValueY  = drawPieChartValues((Graphics2D)g, getBounds(), pieSlice);
        drawPieChart((Graphics2D)g, getBounds(), pieSlice);
    }   

    public void init() {        
// Sizing my applet
        setSize(600,600);
// adding applet to pane
        getContentPane().add(new PieChartApplet());
    }
}

这是“值”代码

package piechartapplet;


import javax.swing.*;
import java.awt.*;

public class SliceValues 
{
// Establishing values for the pir chart

    private double Slicevalue;
    private Color Slicecolor;
    private String Slicestring;

// Construction begins...
    public SliceValues(double value, Color color, String string) {
        this.Slicevalue = value; //values from array
        this.Slicecolor = color; //color from array
        this.Slicestring = string; //string values
    }

// calling slice values, colors, strings, and setting values, colors, strings for each slice
    public double getSliceValue() {
        return Slicevalue;
    }

    public void setSliceValue(double value) {
        this.Slicevalue = value;
    }

    public Color getSliceColor() {
        return Slicecolor;
    }

    public void setSliceColor(Color color) {
        this.Slicecolor = color;
    }

    public String getSliceString() {
        return Slicestring;
    }

    public void setSliceString(String string) {
        this.Slicestring = string;
    }    
}
4

1 回答 1

1

源代码此处PieChartDemo1用标签说明)包含在分发中。

于 2012-05-29T04:57:39.797 回答