如何包装 javafx 图表图例的文本

How to wrap text of a javafx chart legend

任何人都可以帮助我将文本包装在 javafx 图表的图例中。我有饼图和条形图。所有图例都放在底部。我尝试了以下但无法正常工作。

    for (Node node : pie.lookupAll(".chart-legend")) {
                if (node instanceof Text) {
                    System.out.println("Text instance");
                    ((Text) node).setWrappingWidth(380);
                    ((Text) node).setManaged(true);
                }
                if (node instanceof Label) {
                    System.out.println("Label instance");
                    ((Label) node).setWrapText(true);
                    ((Label) node).setManaged(true);
                    ((Label) node).setPrefWidth(380);
                }
  }

编辑: 请参阅突出显示的部分。仍然有些文字不可见。

您看过 CSS 文档了吗? link 指的是图表图例部分: JavaFX CSS Reference

如前所述,它是标签类型,所以我们也可以看看here-fx-wrap-text 可能会成功。当然,您需要编写自己的 CSS 文件并将其附加到您的程序中...

有关更详细的示例,请参考您的 JDK jfxrt.jar,将其解压缩并查找 modena.css,这是默认的 CSS 文件。

问候。 丹尼尔

编辑:我截取了以下内容以实际对应用程序产生影响:

.chart-legend {
   -fx-background-color:  transparent;
   -fx-padding: 20px;
}

.chart-legend-item-symbol {
   -fx-background-radius: 0;
}

.chart-legend-item {
    -fx-text-fill: #191970;
}

但重要的是,将它放在 CSS 中的什么位置。在我的第一次尝试中,我将其放置在 之上 CSS 规则,它设置了默认的标签文本颜色。 当我注意到这一点时,我将它放在 CSS 文件的末尾:et vóila - 它起作用了。

所以请再看一下,你的相应位置在你自己的 CSS。

我终于明白了。尝试在 css 中换行文本无效,因为无法在此处控制标签宽度。因此可以使用以下代码以编程方式包装文本。

for (Node node : pie.lookupAll(".chart-legend-item")) {
                if (node instanceof Label) {
                    System.out.println("Label instance");
                    ((Label) node).setWrapText(true);
                    ((Label) node).setManaged(true);
                    ((Label) node).setPrefWidth(380);
                }
  }