如何向 JavaFX 图表添加辅助图例?

How to add secondary legend to JavaFX chart?

添加自定义节点(在我的例子中是 JavaFX 图表的另一个图例)时

val newLegend = MyLegend()
newLegend.isVertical=true

val legend = lookupAll(".chart-legend").first()

图例是级联的(不足为奇)但至少我知道我可以渲染它:

因此,为了正确地将它们一个接一个地垂直对齐,我尝试将其添加到父对象中:

legend.getParent().addChildIfPossible( newLegend)

但这会使左上角的附加节点错误地呈现为只是一些点

我做错了什么?能否通过更巧妙的方式访问第一个图例的父容器?

可以找到完整的示例源 here

具有 class .chart-legend 的节点实际上是一个 com.sun.javafx.charts.Legend,它又扩展了 TilePane。如果您不想处理 TilePane 的布局约束,只需清除它的子项,然后在其中添加您想要的任何布局容器。在此示例中,我添加了一个 VBox 和三个标签:

with (lookupAll(".chart-legend").first()) {
    getChildList()?.clear()
    vbox {
        label("Line 1")
        label("Line 2")
        label("Line 3")
    }
}

由于很明显图表并未真正为您提供操纵图例的便捷方式,您可以考虑为图表创建自己的皮肤作为更稳定的解决方案。这样您就可以准确控制图例的显示位置。