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



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

我找到的解决方案最终相当简单,但我没有找到很好的文档,想发布它以备将来使用。

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

以下代码将创建一个条形图,其中包含要跟踪的 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);
}

}

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

最新更新