⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 piechart.java

📁 一个完整的
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
                i3 = (int)Math.round((double)l3 * d2);
                k1 = (rectangle.y + rectangle.height / 2) - j2 / 2;
            }
            j = i3;
            k = l3;
        }
        if(pieLabelsOn)
        {
            Font font1 = getFont("pieLabelFont");
            String s = getSampleLabel(i);
            Dimension dimension = getLabelSize(s, font1);
            if(flag)
            {
                int l2 = (int)Math.round((double)j * pieDepth * ((double)pieAngle / 90D));
                int j3 = ((k1 + k / 2 + dimension.height) - fontmetrics.getDescent()) + 2;
                j3 += l2;
                if(j3 > rectangle.y + rectangle.height)
                {
                    int i4 = j3 - (rectangle.y + rectangle.height);
                    k -= i4;
                    k1 -= i4 / 2;
                }
            } else
            {
                k -= dimension.height;
                j = k;
                k1 -= dimension.height / 2;
            }
        }
        pieCenter[i].x = j1;
        pieCenter[i].y = k1;
        pieWidth[i] = j;
        double d = 0.0D;
        for(int k2 = 0; k2 < ad.length; k2++)
            if(ad[k2] > 0.0D)
                d += ad[k2];

        double d3 = 90D;
        int k3 = getSeriesCount();
        for(int j4 = 0; j4 < ad.length; j4++)
        {
            double d7 = (ad[j4] / d) * 360D;
            if(k3 == 1)
                angles[0][j4] = d3;
            else
                angles[j4][i] = d3;
            d3 -= d7;
        }

        if(flag)
        {
            int k4 = k1;
            k1 += (int)Math.round((double)j * pieDepth * ((double)pieAngle / 90D));
            for(int j5 = 0; j5 < ad.length; j5++)
            {
                double d10 = -270D;
                double d15 = d10;
                if(k3 == 1)
                {
                    if(j5 < angles[0].length - 1)
                        d10 = angles[0][j5 + 1];
                    d15 = angles[0][j5];
                } else
                {
                    if(j5 < angles.length - 1)
                        d10 = angles[j5 + 1][i];
                    d15 = angles[j5][i];
                }
                if(d15 != d10)
                {
                    boolean flag4 = false;
                    if(k3 == 1)
                        flag4 = isSelected(0, j5);
                    else
                        flag4 = isSelected(j5, i);
                    double d19 = 0.0D;
                    if(flag4 && selectionStyle == 2)
                        d19 = detachedDistance;
                    else
                    if(k3 == 1)
                        d19 = getDetachedSlice(0, j5);
                    else
                        d19 = getDetachedSlice(j5, i);
                    flag4 = false;
                    paintPieSegment(g, getSampleColor(j5).darker(), d15, d15 - d10, j, k, j1, k1, flag4, d19, 0);
                }
            }

            k1 = k4;
        }
        if(flag)
        {
            double d4 = -270D;
            double d11;
            for(int k5 = ad.length - 1; d4 < -90D && k5 >= 0; d4 = d11)
            {
                d11 = d4;
                if(k3 == 1)
                    d11 = angles[0][k5];
                else
                    d11 = angles[k5][i];
                boolean flag1 = false;
                if(k3 == 1)
                    flag1 = isSelected(0, k5);
                else
                    flag1 = isSelected(k5, i);
                double d16 = 0.0D;
                if(flag1 && selectionStyle == 2)
                    d16 = detachedDistance;
                else
                if(k3 == 1)
                    d16 = getDetachedSlice(0, k5);
                else
                    d16 = getDetachedSlice(k5, i);
                paintPieSegment(g, getSampleColor(k5), d11, d11 - d4, j, k, j1, k1, flag1, d16, 1);
                k5--;
            }

            for(int l5 = 0; l5 < ad.length; l5++)
            {
                double d5 = -270D;
                double d12 = d5;
                if(k3 == 1)
                {
                    if(l5 < angles[0].length - 1)
                        d5 = angles[0][l5 + 1];
                    d12 = angles[0][l5];
                } else
                {
                    if(l5 < angles.length - 1)
                        d5 = angles[l5 + 1][i];
                    d12 = angles[l5][i];
                }
                if(d12 >= -90D)
                {
                    boolean flag2 = false;
                    if(k3 == 1)
                        flag2 = isSelected(0, l5);
                    else
                        flag2 = isSelected(l5, i);
                    double d17 = 0.0D;
                    if(flag2 && selectionStyle == 2)
                        d17 = detachedDistance;
                    else
                    if(k3 == 1)
                        d17 = getDetachedSlice(0, l5);
                    else
                        d17 = getDetachedSlice(l5, i);
                    paintPieSegment(g, getSampleColor(l5), d12, d12 - d5, j, k, j1, k1, flag2, d17, 1);
                }
            }

        }
        for(int l4 = 0; l4 < ad.length; l4++)
        {
            double d8 = -270D;
            double d13 = d8;
            if(k3 == 1)
            {
                if(l4 < angles[0].length - 1)
                    d8 = angles[0][l4 + 1];
                d13 = angles[0][l4];
            } else
            {
                if(l4 < angles.length - 1)
                    d8 = angles[l4 + 1][i];
                d13 = angles[l4][i];
            }
            if(d13 != d8)
            {
                boolean flag3 = false;
                if(k3 == 1)
                    flag3 = isSelected(0, l4);
                else
                    flag3 = isSelected(l4, i);
                double d18 = 0.0D;
                if(flag3 && selectionStyle == 2)
                    d18 = detachedDistance;
                else
                if(k3 == 1)
                    d18 = getDetachedSlice(0, l4);
                else
                    d18 = getDetachedSlice(l4, i);
                paintPieSegment(g, getSampleColor(l4), d13, d13 - d8, j, k, j1, k1, flag3, d18, 0);
            }
        }

        if(sliceSeperatorOn)
        {
            for(int i5 = 0; i5 < ad.length; i5++)
            {
                double d9 = 0.0D;
                if(k3 == 1)
                    d9 = angles[0][i5];
                else
                    d9 = angles[i5][i];
                double d14 = -d9 * 0.017453292519943295D;
                int k6 = j1 + (int)Math.round(Math.cos(d14) * ((double)j * 0.5D));
                int l6 = k1 + (int)Math.round(Math.sin(d14) * ((double)k * 0.5D));
                if(sliceSeperatorColor != null)
                    g.setColor(sliceSeperatorColor);
                else
                    g.setColor(getSampleColor(i5).darker());
                g.drawLine(j1, k1, k6, l6);
            }

        }
        if(pieLabelsOn)
        {
            String s1 = k3 != 1 ? getSampleLabel(i) : getSeriesLabel(i);
            Font font2 = getFont("pieLabelFont");
            if(s1 != null && s1.trim().length() > 0)
            {
                Dimension dimension1 = getLabelSize(s1, font2);
                int i6 = j1 - dimension1.width / 2;
                int j6 = ((k1 + k / 2 + fontmetrics.getHeight()) - fontmetrics.getDescent()) + 2;
                if(flag)
                    j6 += (int)Math.round((double)j * pieDepth * ((double)pieAngle / 90D));
                Color color = getSampleLabelColor(i);
                g.setColor(color == null ? getForeground() : color);
                paintLabel(g, s1, i6, j6, dimension1, 0, 0);
            }
        }
    }

    private String constructLabel(int i, int j, boolean flag, boolean flag1, boolean flag2, boolean flag3)
    {
        int k = getSeriesCount();
        int l = getSampleCount();
        if(i < 0 || i >= k || j < 0 || j >= l)
            return "";
        String s = getLabel("valueLabelPrefix_" + i);
        if(s == null)
            s = getLabel("valueLabelPrefix");
        String s1 = getLabel("valueLabelPostfix_" + i);
        if(s1 == null)
            s1 = getLabel("valueLabelPostfix");
        String s2 = flag ? getSeriesLabel(i) : null;
        String s3 = flag1 ? getSampleLabel(j) : null;
        String s4 = flag2 ? formatNumber(getSampleValue(i, j), getSampleDecimalCount(i)) : null;
        s4 = s == null || s4 == null ? s4 : s + s4;
        s4 = s1 == null || s4 == null ? s4 : s4 + s1;
        String s5 = flag3 ? formatNumber(getPercentValue(i, j), getPercentDecimalCount()) + "%" : null;
        StringBuffer stringbuffer = new StringBuffer();
        if(s2 != null)
        {
            stringbuffer.append(s2);
            if(!s2.endsWith("\n") && (s3 != null || s4 != null || s5 != null))
                stringbuffer.append(" : ");
        }
        if(s3 != null)
        {
            stringbuffer.append(s3);
            if(!s3.endsWith("\n") && (s4 != null || s5 != null))
                stringbuffer.append(" : ");
        }
        if(s4 != null)
        {
            stringbuffer.append(s4);
            if(!s4.endsWith("\n") && s5 != null)
                stringbuffer.append(" : ");
        }
        if(s5 != null)
            stringbuffer.append(s5);
        return stringbuffer.toString();
    }

    private void paintStaticLabels(Graphics g)
    {
        if(g == null)
            return;
        int i = getSeriesCount();
        boolean flag = percentLabelsOn && percentLabelStyle != 0;
        flag |= isValueLabelsOn() && valueLabelStyle != 0;
        flag |= sampleLabelsOn && sampleLabelStyle != 0;
        flag |= seriesLabelsOn && i > 1 && seriesLabelStyle != 0;
        if(!flag)
            return;
        Font font = getFont("insideLabelFont");
        g.setFont(font);
        FontMetrics fontmetrics = g.getFontMetrics();
        int j = getSampleCount();
        boolean flag1 = percentLabelsOn && percentLabelStyle != 0;
        boolean flag2 = isValueLabelsOn() && valueLabelStyle != 0;
        boolean flag3 = seriesLabelsOn && i > 1 && seriesLabelStyle != 0;
        boolean flag4 = sampleLabelsOn && sampleLabelStyle != 0;
        for(int k = 0; k < i; k++)
        {
            for(int l = 0; l < j; l++)
            {
                String s = constructLabel(k, l, flag3, flag4, flag2, flag1);
                paintInsideLabel(g, s, k, l, font, fontmetrics);
            }

        }

    }

    public void setValueLabelStyle(int i)
    {
        valueLabelStyle = 0;
        if(i == 1 || i == 2)
            valueLabelStyle = i;
        super.hasChanged = true;
        autoRepaint();
    }

    public int getValueLabelStyle()
    {
        return valueLabelStyle;
    }

    public void setSliceSeperatorOn(boolean flag)
    {
        sliceSeperatorOn = flag;
        super.hasChanged = true;
        autoRepaint();
    }

    public ChartSample checkSelection(Point point)
    {
        ChartSample chartsample = super.checkSelection(point);
        if(chartsample == null)
        {
            int i = -1;
            Object obj = null;
            for(int j = 0; j < pieBounds.length; j++)
            {
                Rectangle rectangle = pieBounds[j];
                if(rectangle == null || !rectangle.contains(point))
                    continue;
                i = j;
                break;
            }

            if(i >= 0)
            {
                point.x -= pieCenter[i].x;
                point.y -= pieCenter[i].y;
                if(is3DModeOn())
                {
                    int k = pieWidth[i];
                    int l = (int)Math.round((double)k * ((double)pieAngle / 90D));
                    double d2 = (double)k / (double)(k - l);
                    point.y = (int)Math.round((double)point.y * d2);
                }
                double d = Math.atan2(point.y, point.x);
                double d3 = -(d * 57.295779513082323D);
                if(d3 > 90D && d3 <= 180D)
                    d3 = -360D + d3;
                int i1 = getSeriesCount();
                double d5 = 0.0D;
                double d6 = 0.0D;
                double d7 = 0.0D;
                if(i1 == 1)
                {
                    int j1 = getSampleCount();
                    for(int l1 = 0; l1 < j1; l1++)
                    {
                        if(l1 < j1 - 1)
                        {
                            d6 = Math.min(angles[0][l1], angles[0][l1 + 1]);
                            d7 = Math.max(angles[0][l1], angles[0][l1 + 1]);
                        } else
                        {
                            d6 = Math.min(angles[0][l1], -270D);
                            d7 = Math.max(angles[0][l1], -270D);
                        }
                        if(d3 < d6 || d3 >= d7)
                            continue;
                        chartsample = getSample(0, l1);
                        d5 = (d6 + d7) / 2D;
                        break;
                    }

                } else
                {
                    for(int k1 = 0; k1 < i1; k1++)
                    {
                        if(k1 < i1 - 1)
                        {
                            d6 = Math.min(angles[k1][i], angles[k1 + 1][i]);
                            d7 = Math.max(angles[k1][i], angles[k1 + 1][i]);
                        } else
                        {
                            d6 = Math.min(angles[k1][i], -270D);
                            d7 = Math.max(angles[k1][i], -270D);
                        }
                        if(d3 < d6 || d3 >= d7)
                            continue;
                        chartsample = getSample(k1, i);
                        d5 = (d6 + d7) / 2D;
                        break;
                    }

                }
                if(chartsample != null && chartsample.isSelected() && selectionStyle == 2)
                {
                    double d8 = d5 * 0.017453292519943295D;
                    point.x -= Math.cos(d8) * (double)pieWidth[i] * 0.5D * detachedDistance;
                    point.y += Math.sin(d8) * (double)pieWidth[i] * 0.5D * detachedDistance;
                    double d1 = Math.atan2(point.y, point.x);
                    double d4 = -(d1 * 57.295779513082323D);
                    if(d4 > 90D && d4 <= 180D)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -