相关疑难解决方法(0)

JavaFX 2.0 - 如何动态更改LineChart的图例颜色?

我正在尝试设计我的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,我不知道如何更改图例颜色.

在此输入图像描述

javafx-2

6
推荐指数
1
解决办法
5650
查看次数

JavaFX BarChart,按系列名称设置系列颜色

我正在尝试动态设置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)

这不会按预期工作。该SeriesNode始终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)

javafx

3
推荐指数
1
解决办法
2554
查看次数

JavaFX LineChart图例样式

我想更新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)

java javafx-2

2
推荐指数
1
解决办法
4748
查看次数

标签 统计

javafx-2 ×2

java ×1

javafx ×1