java - StackedAreaChart 在后续数据重新填充 8 种颜色后的默认着色策略

标签 java javafx javafx-8 stacked-area-chart

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

enter image description here

上面的输出来自下面的应用程序,每次单击窗口时,它都会清除 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);
    }

}

最佳答案

找到解决方法:

插入

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);
}

chart.getData().clear(); 之前。

StackedAreaChart 似乎从上次停止的地方继续编号,奇怪的是,前 8 种颜色除外。

关于java - StackedAreaChart 在后续数据重新填充 8 种颜色后的默认着色策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28751161/

相关文章:

java - 在同步代码段中使用 wait() 而不使用 notification() (java)

java - JavaFX TableView 中的拖放事件

javafx - 上下文菜单中的第一个选项突出显示,而无需从 javafx 9 悬停鼠标

javafx-8 - JavaFX 8 - GridPane 自动调整大小问题

java - @FXML 、 @FXMLController 和 @ViewNode 之间有什么区别?

java - Android - 点击alertDialog内的按钮

java - 简单 XML 序列化第三方库

java - gRPC 和扩展注册表

css - Java FX CSS @import 路径问题

java - 在JavaFX中添加Spring依赖注入(inject)(JPA存储库,服务)