如何使用Javafx BarChart更改特定条形图的颜色?

时间:2017-04-13 15:36:16

标签: java css javafx bar-chart

这是我在处理项目时一直在寻找的东西。我能找到的最好的是如何根据特定值更改所有条形或独立。两者都不是一个合适的解决方案。您可能想要更改单个条形图,并且每个条形图的数量可能会发生变化。

1 个答案:

答案 0 :(得分:0)

我发现的解决方案最终变得相当简单,但我没有找到很好的文档,并希望将其发布以备将来使用。

注意:所有这些栏都在同一系列中。类似的修复可能会应用于使用多个系列的条形图,但是当每个类别只需要一个条形时,这会给我带来间距问题。

以下代码将创建一个条形图,其中包含4个类别以跟踪并将其添加到图表中。

public class BarChartExample extends Application {

final static String project = "Project - 20%";
final static String quiz = "Quiz - 10%";
final static String midterm = "Midterm - 30%";
final static String finalexam = "Final - 40%";

@Override
public void start(Stage primaryStage) throws Exception{
    primaryStage.setTitle("Change Bar Color Example");
    final CategoryAxis xAxis = new CategoryAxis();
    final NumberAxis yAxis = new NumberAxis();
    final BarChart<String,Number> barChart = new BarChart<String,Number>(xAxis,yAxis);
    xAxis.setLabel("Assignment Type");
    yAxis.setLabel("Percentage");

    XYChart.Series series = new XYChart.Series();
    series.getData().add(new XYChart.Data(project, 20));
    series.getData().add(new XYChart.Data(quiz, 10));
    series.getData().add(new XYChart.Data(midterm, 30));
    series.getData().add(new XYChart.Data(finalexam, 40));
    barChart.getData().add(series);

下一部分是与此帖相关的部分。这是颜色变化发生的地方。这些条被视为节点,因此您可以将每个条设置为等于节点变量,并使用CSS来更改它的样式。

    Node n = barChart.lookup(".data0.chart-bar");
    n.setStyle("-fx-bar-fill: red");
    n = barChart.lookup(".data1.chart-bar");
    n.setStyle("-fx-bar-fill: blue");
    n = barChart.lookup(".data2.chart-bar");
    n.setStyle("-fx-bar-fill: green");
    n = barChart.lookup(".data3.chart-bar");
    n.setStyle("-fx-bar-fill: orange");

其余的只是摆脱了传说(因为在这种情况下它是不必要的)并填写剩余的必要代码以使其运行。

    barChart.setLegendVisible(false);
    VBox vbox = new VBox(barChart);

    Scene scene = new Scene(vbox);

    primaryStage.setScene(scene);
    primaryStage.show();

}

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

}

我希望这可以帮助任何人尝试设置特定颜色的条形图。