📄 piechart.java
字号:
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 + -