JavaFX StackedBarChart自动在不同系列上重复使用相同的颜色:如何避免?
在JavaFx中,我使用以下代码创建了一个StackedBarChart:JavaFX StackedBarChart自动在不同系列上重复使用相同的颜色:如何避免?,java,css,highcharts,javafx,colors,Java,Css,Highcharts,Javafx,Colors,在JavaFx中,我使用以下代码创建了一个StackedBarChart: String[] ACTIVITIES = new String[10]{ ... };// there are 10 activity names here for (String activityName : ACTIVITIES) { Series<String, Number> activitySerie = new Series<Str
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);
}
String[]ACTIVITIES=新字符串[10]{…};//这里有10个活动名称
对于(字符串activityName:ACTIVITIES){
系列活动系列=新系列();
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);
}
}
这似乎仍然不起作用。虽然第10个系列是我在CSS文件中指定的颜色,但第9个系列仍然是第1个系列的颜色。另外-我不认为您打算在条件中包含
未处理的.getNode()…
。。。
.default-color8.chart-bar {
-fx-bar-fill: black ;
}
.default-color9.chart-bar {
-fx-bar-fill: green ;
}