gpt4 book ai didi

java - JavaFX 的 PieChart 可以显示为 donut 吗?

转载 作者:搜寻专家 更新时间:2023-11-01 01:21:31 26 4
gpt4 key购买 nike

我在使用 Java7 构建的 Java 应用程序中使用 javafx.scene.chart.PieChart。有没有办法让 PieChart 空心 - 把它变成一个 donut ?

最佳答案

是的,您可以使用 DoughnutChart 类。

doughnut

*DoughnutChart.java**

import javafx.collections.ObservableList;
import javafx.geometry.Bounds;
import javafx.scene.Node;
import javafx.scene.chart.PieChart;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;

public class DoughnutChart extends PieChart {
private final Circle innerCircle;

public DoughnutChart(ObservableList<Data> pieData) {
super(pieData);

innerCircle = new Circle();

// just styled in code for demo purposes,
// use a style class instead to style via css.
innerCircle.setFill(Color.WHITESMOKE);
innerCircle.setStroke(Color.WHITE);
innerCircle.setStrokeWidth(3);
}

@Override
protected void layoutChartChildren(double top, double left, double contentWidth, double contentHeight) {
super.layoutChartChildren(top, left, contentWidth, contentHeight);

addInnerCircleIfNotPresent();
updateInnerCircleLayout();
}

private void addInnerCircleIfNotPresent() {
if (getData().size() > 0) {
Node pie = getData().get(0).getNode();
if (pie.getParent() instanceof Pane) {
Pane parent = (Pane) pie.getParent();

if (!parent.getChildren().contains(innerCircle)) {
parent.getChildren().add(innerCircle);
}
}
}
}

private void updateInnerCircleLayout() {
double minX = Double.MAX_VALUE, minY = Double.MAX_VALUE;
double maxX = Double.MIN_VALUE, maxY = Double.MIN_VALUE;
for (PieChart.Data data: getData()) {
Node node = data.getNode();

Bounds bounds = node.getBoundsInParent();
if (bounds.getMinX() < minX) {
minX = bounds.getMinX();
}
if (bounds.getMinY() < minY) {
minY = bounds.getMinY();
}
if (bounds.getMaxX() > maxX) {
maxX = bounds.getMaxX();
}
if (bounds.getMaxY() > maxY) {
maxY = bounds.getMaxY();
}
}

innerCircle.setCenterX(minX + (maxX - minX) / 2);
innerCircle.setCenterY(minY + (maxY - minY) / 2);

innerCircle.setRadius((maxX - minX) / 4);
}
}

DoughnutChartSample.java

import javafx.application.Application;
import javafx.collections.*;
import javafx.scene.Scene;
import javafx.scene.chart.PieChart;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class DoughnutChartSample extends Application {

@Override public void start(Stage stage) {
stage.setTitle("Imported Fruits");
stage.setWidth(500);
stage.setHeight(500);

ObservableList<PieChart.Data> pieChartData = createData();

final DoughnutChart chart = new DoughnutChart(pieChartData);
chart.setTitle("Imported Fruits");

Scene scene = new Scene(new StackPane(chart));
stage.setScene(scene);
stage.show();
}

private ObservableList<PieChart.Data> createData() {
return FXCollections.observableArrayList(
new PieChart.Data("Grapefruit", 13),
new PieChart.Data("Oranges", 25),
new PieChart.Data("Plums", 10),
new PieChart.Data("Pears", 22),
new PieChart.Data("Apples", 30));
}

public static void main(String[] args) {
launch(args);
}

}

关于java - JavaFX 的 PieChart 可以显示为 donut 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24121580/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com