颜色在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 ;}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)