JavaFX Double Donut Chart - PullRequest
       40

JavaFX Double Donut Chart

0 голосов
/ 26 сентября 2019

Я работаю в автономном режиме, поэтому не могу скопировать всю кодовую базу, постараюсь описать как можно больше.

JavaFX не предоставляет кольцевую диаграмму, поэтому я создалПользовательский график пончик, просто расширяя PieChart и затем добавляя круг в центр.Псевдокод выглядит следующим образом:

public class DonutChart extends PieChart{
    private final Circle innerCircle;

    //Initialize PieChart
    //Override "layoutChartChildren()" method to override chart label with value instead of name
    //Calculate chart bounds by looping through each node to find the max/min X/Y bounds.
    //Create a smaller circle and relocate it to the center of the PieChart
}

Это дало мне кольцевую диаграмму, которую я хотел, но теперь я хочу иметь двойную кольцевую диаграмму, то есть еще один слой, который разбивает диаграмму дальше.Я сделал то же самое снова, но на этот раз вместо того, чтобы просто добавить «innerCircle», я также добавил еще одну круговую диаграмму.Теперь это выглядит примерно так:

public class DonutChart extends PieChart{
    private final Circle innerCircle;
    private PieChart innerChart;

   /*
    * Initialize PieChart
    * Override "layoutChartChildren()" method to override chart label with value instead of name
    * Calculate chart bounds by looping through each node to find the max/min X/Y bounds.
    * Create and add innerChart and innerCircle
    */
    private void addChartAndCircle(){
        if (getData().size > 0){
            Node pie = getData().get(0).getNode();
            if (pie.getParent() instanceof Pane){
                Pane parent = pie.getParent();
                if (!parent.getChildren().contains(innerChart)){
                    parent.getChildren().add(innerChart);
                }
                if (!parent.getChildren().contains(innerCircle)){
                    parent.getChildren().add(innerCircle);
                }
            }
        }
    }
    //Relocate to center
}

Только внешний график "DonutChart" отображался вместе с внутренним кругом, но innerChart нигде не было видно.Я также заметил, что свойство width внутренней диаграммы равно 0, и я попытался связать свойство, задав max / min / pref width / height innerChart, но безрезультатно.

Может ли кто-нибудьсоздать пользовательскую кольцевую диаграмму, в которой отображены 2 слоя?

...