更改 javafx 中堆栈条形图的颜色

pra*_*ake 1 java javafx javafx-2 javafx-8

我创建了带有两个堆栈的堆栈条形图,我想让后一个堆栈不可见......

StackBar.getData().addAll(series1,series2);
Run Code Online (Sandbox Code Playgroud)

我想改变系列1中的颜色,

有没有任何方法或教程可以展示如何做到这一点?

Man*_*eli 5

我认为你的意思是这样的:

所以你所要做的就是改变这个 CSS 类:.default-color0.chart-bar

然后您可以将其设置为白色(与背景相同或visibility:hidden;),下面您可以看到如何实现这一目标的一个示例。

在此输入图像描述

import java.util.Arrays;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.StackedBarChart;
import javafx.scene.chart.XYChart;
import javafx.stage.Stage;


public class Charts extends Application {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("stackoverflow.com");
        Group root = new Group();

        final CategoryAxis xAxis = new CategoryAxis();
        final NumberAxis yAxis = new NumberAxis();

        xAxis.setLabel("Month");
        xAxis.setCategories(FXCollections.<String> observableArrayList(Arrays.asList(
                "January", 
                "February",
                "March",
                "April",
                "May",
                "June",
                "July",
                "August",
                "September",
                "October",
                "November",
                "December")));
        yAxis.setLabel("Value");

        final StackedBarChart<String,Number> stackedBarChart = new StackedBarChart<>(xAxis,yAxis);

        stackedBarChart.setTitle("StackedBarChart");

        //Series 1
        XYChart.Series<String,Number> series1 = new XYChart.Series();
        series1.setName("XYChart.Series 1");

        series1.getData().add(new XYChart.Data("January", 100));
        series1.getData().add(new XYChart.Data("February", 200));
        series1.getData().add(new XYChart.Data("March", 50));
        series1.getData().add(new XYChart.Data("April", 75));
        series1.getData().add(new XYChart.Data("May", 110));
        series1.getData().add(new XYChart.Data("June", 300));
        series1.getData().add(new XYChart.Data("July", 111));
        series1.getData().add(new XYChart.Data("August", 30));
        series1.getData().add(new XYChart.Data("September", 75));
        series1.getData().add(new XYChart.Data("October", 55));
        series1.getData().add(new XYChart.Data("November", 225));
        series1.getData().add(new XYChart.Data("December", 99));

        //Series 2
        XYChart.Series<String,Number> series2 = new XYChart.Series();
        series2.setName("XYChart.Series 2");


        series2.getData().add(new XYChart.Data("January", 150));
        series2.getData().add(new XYChart.Data("February", 100));
        series2.getData().add(new XYChart.Data("March", 60));
        series2.getData().add(new XYChart.Data("April", 40));
        series2.getData().add(new XYChart.Data("May", 30));
        series2.getData().add(new XYChart.Data("June", 100));
        series2.getData().add(new XYChart.Data("July", 100));
        series2.getData().add(new XYChart.Data("August", 10));
        series2.getData().add(new XYChart.Data("September", 175));
        series2.getData().add(new XYChart.Data("October", 155));
        series2.getData().add(new XYChart.Data("November", 125));
        series2.getData().add(new XYChart.Data("December", 150));

        //
        stackedBarChart.getData().addAll(series1, series2);      
        root.getChildren().addAll(stackedBarChart);
        primaryStage.setScene(new Scene(root, 500, 400));
        primaryStage.getScene().getStylesheets().add("style.css");
        primaryStage.show();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后是 styles.css 的 CSS:

.default-color0.chart-bar {
    -fx-bar-fill: #FFFFFF; 
    visibility:hidden;
    }
.default-color1.chart-bar { 
    -fx-bar-fill: #00FFCC; 
    }
Run Code Online (Sandbox Code Playgroud)