2

我知道我可以使用以下代码设置图例项的设置颜色:

for (Node n : chart.lookupAll(".bar-legend-symbol.default-color0")) { n.setStyle("-fx-background-color: " + "red"+ ";"); }

但它只有在我第一次将数据添加到图表然后再将图表添加到场景时才有效。像这样:

final XYChart.Series<String, Number> series = new XYChart.Series<String, Number>();
XYChart.Data<String, Number>bar = new XYChart.Data<String, Number>("test", 120);
series.getData().add(bar);

chart.getData().add(series);

chartFxPanel.setScene(new Scene(chart));

for (Node n : chart.lookupAll(".bar-legend-symbol.default-color0")) {
    n.setStyle("-fx-background-color: " + "red"+ ";");
   }

但是我想在图表添加到场景后将数据添加到图表中。如果我这样做,它不会改变图例项的颜色:

final XYChart.Series<String, Number> series = new XYChart.Series<String, Number>();
XYChart.Data<String, Number>bar = new XYChart.Data<String, Number>("test", 120);
series.getData().add(bar);


chartFxPanel.setScene(new Scene(chart));
chart.getData().add(series);


for (Node n : chart.lookupAll(".bar-legend-symbol.default-color0")) {
    n.setStyle("-fx-background-color: " + "red"+ ";");
   }

那么如何更改图例项的颜色?

4

1 回答 1

2

如果您将查找/setStyle 代码包装在Platform.runLater调用中,它可能会起作用(或者最坏的情况,使用像此示例这样的时间轴来延迟它)。这些构造使 JavaFX 系统有机会在下一个脉冲上处理和设置数据项更改的样式,以便您随后可以覆盖它。

为什么不能只使用 css 样式表而不是使用 java 代码查找来自定义样式?也就是说,使用JavaFX 图表样式指南中概述的类似技术。那么您就不需要处理与查找时间相关的问题,这似乎更可取。

于 2013-01-23T10:49:41.723 回答