我遇到了类似的问题。我不知道将哪些数据添加到图表中,所以我不能使用固定的样式表。
我想出了这个解决方案。此代码侦听添加到图形的新系列。对于每个添加的系列,它将为添加到系列中的数据创建一个新的侦听器。此侦听器将查找这是哪个系列,第 0 个、第 1 个等,然后找到用于线条和图例/符号着色的两个节点。一旦设置了两者,它就可以取消订阅。问题可能是当您在第一个添加的数据点上收到回调时,图例/符号节点尚不可用。
我知道这非常令人费解,我愿意听到改进。至少它可以让您选择动态地将颜色设置为您想要的任何颜色。
final LineChart<Number, Number> chart = new LineChart<>(new NumberAxis(), new NumberAxis());
final ObservableList<Series<Number, Number>> series = chart.getData();
series.addListener(new ListChangeListener<Series<Number, Number>>() {
@Override
public void onChanged(Change<? extends Series<Number, Number>> change) {
ObservableList<? extends Series<Number, Number>> list = change.getList();
for (final Series<Number, Number> serie : list) {
serie.getData().addListener(new ListChangeListener<Data<Number, Number>>() {
@Override
public void onChanged(Change<? extends Data<Number, Number>> ignore) {
int index = series.indexOf(serie);
Set<Node> nodes = chart.lookupAll(".series" + index);
boolean isStyleSet = false;
for (Node n : nodes) {
if (StringUtils.isEmpty(n.getStyle())) {
String css = "-fx-stroke: %s; -fx-background-color: %s, white; ";
String color = //assign dynamically here, for instance based on the name of the series
n.setStyle(String.format(css, color, color));
isStyleSet = true;
}
}
if (!isStyleSet & nodes.size() > 1) {
serie.getData().removeListener(this);
}
}
});
}
}
});