首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaFX StackedBarChart在不同的系列上自动重用相同的颜色:如何避免?

JavaFX StackedBarChart在不同的系列上自动重用相同的颜色:如何避免?
EN

Stack Overflow用户
提问于 2015-10-01 14:48:24
回答 1查看 471关注 0票数 0

在JavaFx中,我使用以下代码创建了一个StackedBarChart:

代码语言:javascript
复制
        String[] ACTIVITIES = new String[10]{ ... };// there are 10 activity names here
        for (String activityName : ACTIVITIES) { 
            Series<String, Number> activitySerie = new Series<String, Number>();
            activitySerie.setName(activityName);
            stackedBarChart.getData().add(activitySerie);

        }

结果是,从1到8的系列有不同的颜色。系列9-10具有与系列1-2相同的颜色.我试着在style.css文件中为条形图指定默认颜色,但是看起来Series9-10实际上使用了颜色0和1,我认为这是一个错误。有人知道解决办法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-01 15:22:38

颜色在8个系列之后被回收(原因是定义的颜色数量必须有一些硬编码限制: JavaFX CSS语法根本没有提供足够的语法来计算任意值,而对于超出这个限制的系列,需要定义一些颜色)。

要为8之后的系列创建颜色,您需要做两件事:在表示附加系列的节点上设置一个样式类,并为CSS中的节点设置样式。

SSCCE:

代码语言:javascript
复制
import java.util.Random;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.StackedBarChart;
import javafx.scene.chart.XYChart.Data;
import javafx.scene.chart.XYChart.Series;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;

public class StackedBarChartExample extends Application {

    @Override
    public void start(Stage primaryStage) {
        StackedBarChart<String, Number> chart = new StackedBarChart<>(new CategoryAxis(), new NumberAxis());

        Random rng = new Random();

        int numSeries = 10 ;
        int defaultColorsDefined = 8 ;


        for (int i = 0; i < numSeries; i++) {
            Series<String, Number> series = new Series<>();
            Data<String, Number> untreated = new Data<>("Untreated", rng.nextDouble());
            series.getData().add(untreated);
            Data<String, Number> treated = new Data<>("Treated", rng.nextDouble());
            series.getData().add(treated);
            series.setName("Series "+i);

            chart.getData().add(series);

            // add style classes for additional series beyond the default support:
            // Note this must be done after adding the series to the chart...
            if (i >= defaultColorsDefined) {
                untreated.getNode().getStyleClass().add("default-color"+i);
                treated.getNode().getStyleClass().add("default-color"+i);
            }
        }

        BorderPane root = new BorderPane(chart);
        Scene scene = new Scene(root);
        scene.getStylesheets().add("stacked-bar-chart.css");
        primaryStage.setScene(scene);
        primaryStage.show();


    }

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

然后用通常的方式在css中定义一些颜色:

代码语言:javascript
复制
.default-color8.chart-bar {
    -fx-bar-fill: black ;
}
.default-color9.chart-bar {
    -fx-bar-fill: green ;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32890539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档