在 JavaFX 饼图中显示附加标签
Displaying additional label in JavaFX Pie Chart
我有一个饼图显示 图例(文本) 和 标签(值)。我希望显示一个饼图,饼图外面有值,里面有 %。
我已按照 更改外部标签以显示值而不是文本,但我想要另一个显示百分比的内部标签。
有什么方法可以添加这些标签吗?如果是这样,我该怎么做?我应该使用什么等式来很好地对齐这些标签?
我找到了解决方案,我几乎只是复制了几乎整个 "layoutChartChildren()" 方法。 link转源码here.
你需要注意的主要是下面两行,告诉你放置标签的坐标。
double sliceCenterEdgeX = calcX(labelAngles[index], pieRadius, centerX);
double sliceCenterEdgeY = calcY(labelAngles[index], pieRadius, centerY);
pieRadius 将是距放置标签的圆心的距离。我将包含一小段我复制的提取代码,其他方法可以直接从提供的源代码中复制。
double[] labelAngles = new double[getData().size()];
double scale = (total != 0) ? 360 / total : 0;
double start = getStartAngle();
int index = 0;
for (Data d : getData()){
double size = (isClockwise()) ? (-scale * Math.abs(item.getCurrentPieValue())) : (scale * Math.abs(item.getCurrentPieValue()));
labelAngles[index] = normalizeAngle(start + (size / 2));
double sliceX = calcX(labelAngles[index], pieRadius * 0.7, centerX);
double sliceY = calcY(labelAngles[index], pieRadius * 0.7, centerY);
//Note: to place it in perfect center:
//sliceX = sliceX - (text.getBoundsInLocal().getWidth() / 2;
//sliceY = sliceY - (text.getBoundsInLocal().getHeight() / 2;
text.relocate(sliceX, sliceY);
}
我有一个饼图显示 图例(文本) 和 标签(值)。我希望显示一个饼图,饼图外面有值,里面有 %。
我已按照
有什么方法可以添加这些标签吗?如果是这样,我该怎么做?我应该使用什么等式来很好地对齐这些标签?
我找到了解决方案,我几乎只是复制了几乎整个 "layoutChartChildren()" 方法。 link转源码here.
你需要注意的主要是下面两行,告诉你放置标签的坐标。
double sliceCenterEdgeX = calcX(labelAngles[index], pieRadius, centerX);
double sliceCenterEdgeY = calcY(labelAngles[index], pieRadius, centerY);
pieRadius 将是距放置标签的圆心的距离。我将包含一小段我复制的提取代码,其他方法可以直接从提供的源代码中复制。
double[] labelAngles = new double[getData().size()];
double scale = (total != 0) ? 360 / total : 0;
double start = getStartAngle();
int index = 0;
for (Data d : getData()){
double size = (isClockwise()) ? (-scale * Math.abs(item.getCurrentPieValue())) : (scale * Math.abs(item.getCurrentPieValue()));
labelAngles[index] = normalizeAngle(start + (size / 2));
double sliceX = calcX(labelAngles[index], pieRadius * 0.7, centerX);
double sliceY = calcY(labelAngles[index], pieRadius * 0.7, centerY);
//Note: to place it in perfect center:
//sliceX = sliceX - (text.getBoundsInLocal().getWidth() / 2;
//sliceY = sliceY - (text.getBoundsInLocal().getHeight() / 2;
text.relocate(sliceX, sliceY);
}