gpt4 book ai didi

JavaFX StackedBarChart 自动在不同系列上重复使用相同的颜色 : how to avoid it?

转载 作者:行者123 更新时间:2023-11-30 03:14:50 31 4
gpt4 key购买 nike

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

        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 文件中指定条形图的默认颜色,但似乎系列 9-10 实际上使用颜色 0 和 1。我认为这是一个错误。有谁知道解决方法吗?

最佳答案

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

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

SSCCE:

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 中定义一些颜色:

.default-color8.chart-bar {
-fx-bar-fill: black ;
}
.default-color9.chart-bar {
-fx-bar-fill: green ;
}

关于JavaFX StackedBarChart 自动在不同系列上重复使用相同的颜色 : how to avoid it?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32890539/

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