我正在尝试设计我的JavaFX线图,但我对这个图例有些麻烦.
我知道如何更改css文件中折线图的图例颜色:
.default-color0.chart-series-line { -fx-stroke: #FF0000, white; }
.default-color1.chart-series-line { -fx-stroke: #00FF00, white; }
.default-color2.chart-series-line { -fx-stroke: #0000FF, white; }
.default-color0.chart-line-symbol { -fx-background-color: #FF0000, white; }
.default-color1.chart-line-symbol { -fx-background-color: #00FF00, white; }
.default-color2.chart-line-symbol { -fx-background-color: #0000FF, white; }
但这对我的目的来说还不够.我有三个或更多彩色切换按钮和每个按钮的一系列数据.选择按钮后,数据应以与按钮相同的颜色显示.这可以通过多个选择按钮来实现,这样就可以同时显示多个系列的数据.
对于图表行,我通过在单击按钮后更改样式来管理它:
..
dataList.add(series);
..
series.getNode().setStyle("-fx-stroke: rgba(" + rgba + ")");
如果取消选择按钮,我会从列表中删除数据.
dataList.remove(series);
这对于笔画来说效果很好,但是我怎么能为传奇做同样的事情呢?
您可以在下面看到一个示例.首先我单击红色按钮,因此笔划和图例为红色(default-color0).之后我点击了蓝色按钮.在这里你可以看到问题.笔划为蓝色,但图例为绿色,因为使用了默认的color1,我不知道如何更改图例颜色.

我正在尝试动态设置BarChart Series颜色。
我希望同一个系列名称始终具有相同的颜色。 它在图表中并不总是相同的系列名称,这就是为什么我不能依赖图表中的位置(默认颜色在数据列表中的相同位置总是相同的)。
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");
}
}
}
}
}
});
Run Code Online (Sandbox Code Playgroud)
这不会按预期工作。该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) …Run Code Online (Sandbox Code Playgroud) 我想更新LineChart图例的样式,我在具有相应系列类的节点上使用setStyle。
String color = ....
XYChart.Series<Number, Number> series = new XYChart.Series<Number, Number>();
_chart.getData().add(series);
String seriesClass = null;
for(String styleClass : series.getNode().getStyleClass())
{
if(styleClass.startsWith("series"))
{
seriesClass = styleClass;
break;
}
}
if(seriesClass != null)
{
//
// Customize the style.
//
StringBuilder sb = new StringBuilder();
sb.append("-fx-stroke: ");
sb.append(color);
sb.append("; ");
sb.append("-fx-background-color: ");
sb.append(color);
sb.append(", white;");
if(doted)
{
sb.append("-fx-stroke-dash-array: 10 10");
}
_styles.put(seriesClass, sb.toString());
}
java.util.Set<javafx.scene.Node> nodes = _chart.lookupAll("." + seriesClass);
for(javafx.scene.Node n : nodes)
{
n.setStyle(style);
}
Run Code Online (Sandbox Code Playgroud)
事实是,这只会影响路径的样式,图例样式不会改变。我已经打印了图表节点的子级,并发现在添加系列调用返回后未完全创建图例:
Legend@18e8627[styleClass=chart-legend]
Label@1689c98[styleClass=label …Run Code Online (Sandbox Code Playgroud)