我試圖動態設置BarChart
Series
顏色。JavaFX BarChart,按系列名稱設置系列顏色
我想要爲同一系列名稱始終使用相同的顏色。 它在圖表中並不總是相同的系列名稱,這就是爲什麼我不能依賴圖表中的位置(每個默認顏色在數據列表中的相同位置始終相同)。
chart.getData().addListener(new ListChangeListener<Series<String, Number>>() {
@Override
public void onChanged(
final javafx.collections.ListChangeListener.Change<? extends Series<String, Number>> c) {
while (c.next()) {
for (final Series s : c.getAddedSubList()) {
if ("booking".equalsIgnoreCase(s.getName())) {
if (s.getNode() != null) {
s.getNode().getStyleClass().add(".source-background-booking");
}
} else if ("airbnb".equalsIgnoreCase(s.getName())) {
if (s.getNode() != null) {
s.getNode().getStyleClass().add(".source-background-airbnb");
}
}
}
}
}
});
這不起作用。 Series
的Node
總是null
。這是爲什麼?
編輯:不工作的另一種方法:
chart.getData().addListener(new ListChangeListener<Series<String, Number>>() {
@Override
public void onChanged(
final javafx.collections.ListChangeListener.Change<? extends Series<String, Number>> c) {
while (c.next()) {
System.err.println("Series " + c.getAddedSubList() + " kommt rein..");
for (final Series<String, Number> s : c.getAddedSubList()) {
s.nodeProperty().addListener(new ChangeListener<Node>() {
@Override
public void changed(final ObservableValue<? extends Node> observable, final Node oldValue,
final Node newValue) {
System.err.println("Already good");
if ("booking".equalsIgnoreCase(s.getName())) {
newValue.getStyleClass().add(".source-background-booking");
System.err.println("Seems to work..");
} else if ("airbnb".equalsIgnoreCase(s.getName())) {
newValue.getStyleClass().add(".source-background-airbnb");
System.err.println("Seems to work..");
}
}
});
}
}
}
});
不幸的是,這個回調似乎從來沒有所謂的..
你應該做一些類似於[this](https://stackoverflow.com/questions/15233858/how-to-change-color-of-a-single-bar-java-fx)或[this] (https://stackoverflow.com/questions/14158104/javafx-barchart-color)。 – Sedrick
感謝塞德里克,看到編輯(第一個建議),第二個不起作用,因爲不同系列並不總是在同一個位置,這就是爲什麼默認顏色('.default-color0.chart-bar {-fx-bar-填充:*****}')不起作用。 – kerner1000
您是否嘗試根據酒吧系列名稱設置顏色? – Sedrick