Java StackedAreChart';在后续数据重新填充时使用8种颜色后的默认着色策略

Java StackedAreChart';在后续数据重新填充时使用8种颜色后的默认着色策略,java,javafx,javafx-8,stacked-area-chart,Java,Javafx,Javafx 8,Stacked Area Chart,我正试图了解StackedAreaChart如何对其系列进行着色,以便在我的应用程序中,当数据被完全新的数据替换时,对系列进行一致的着色。起初,我认为StackedAreaChart循环使用8种默认颜色。换句话说,数据系列根据其在mod 8的getData()中的索引着色。但我遇到了意想不到的行为: 上面的输出来自下面的应用程序,它清除StackedAreaChart的数据,并在每次单击窗口时重新填充10个新系列。如您所见,只有前8种颜色在单击/重新填充时是一致的 public class T

我正试图了解
StackedAreaChart
如何对其系列进行着色,以便在我的应用程序中,当数据被完全新的数据替换时,对系列进行一致的着色。起初,我认为
StackedAreaChart
循环使用8种默认颜色。换句话说,数据系列根据其在mod 8的
getData()
中的索引着色。但我遇到了意想不到的行为:

上面的输出来自下面的应用程序,它清除
StackedAreaChart
的数据,并在每次单击窗口时重新填充10个新系列。如您所见,只有前8种颜色在单击/重新填充时是一致的

public class TestChartColors extends Application {

    private int clickCount = 0;

    @Override
    public void start(Stage primaryStage) {

        NumberAxis xAxis = new NumberAxis(0, 10, 1);
        NumberAxis yAxis = new NumberAxis(0, 10, 1);
        final StackedAreaChart<Number,Number> chart = new StackedAreaChart<>(xAxis,yAxis);
        chart.setLegendVisible(false);
        chart.setCreateSymbols(false);
        chart.setAnimated(false);

        chart.setOnMouseClicked((MouseEvent event) -> {
            clickCount++;
            chart.getData().clear();
            for(int i=0; i<10; i++){
                chart.getData().add(flatSeries());
            }
            primaryStage.setTitle("After " + clickCount + " clicks.");
        });

        StackPane root = new StackPane();
        root.getChildren().add(chart);

        Scene scene = new Scene(root, 300, 250);

        primaryStage.setScene(scene);
        primaryStage.setTitle("Click the window.");
        primaryStage.show();
    }

    private Series<Number,Number> flatSeries(){
        Series<Number,Number> s = new Series<>();
        ObservableList<XYChart.Data<Number, Number>> d = s.getData();
        d.add(new XYChart.Data<>(0, 1));
        d.add(new XYChart.Data<>(10, 1));
        return s;
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }

}
公共类TestChartColor扩展了应用程序{
私有int clickCount=0;
@凌驾
公共无效开始(阶段primaryStage){
NumberAxis xAxis=新的NumberAxis(0,10,1);
NumberAxis-yAxis=新的NumberAxis(0,10,1);
最终StackedAreaChart图表=新StackedAreaChart(xAxis,yAxis);
图表。setLegendVisible(假);
chart.setCreateSynumbles(false);
图表.设置动画(假);
chart.setOnMouseClicked((MouseEvent事件)->{
点击计数++;
chart.getData().clear();
对于(int i=0;i找到的变通方法:

插入

while(chart.getData().size() % 8 != 0){
    final XYChart.Series<Number,Number> series = new XYChart.Series<>();
    series.getData().add(new XYChart.Data<>(0,0));             
    chart.getData().add(series);
}
while(chart.getData().size()%8!=0){
最终的XYChart.Series系列=新的XYChart.Series();
series.getData().add(新的XYChart.Data(0,0));
chart.getData().add(系列);
}
chart.getData().clear()之前;

StackedAreaChart似乎继续它停止的编号,奇怪的是,除了前8种颜色