如何将次要图例添加到JavaFX图表?

如何将次要图例添加到JavaFX图表?,java,javafx,charts,kotlin,tornadofx,Java,Javafx,Charts,Kotlin,Tornadofx,添加自定义节点时(在我的示例中是JavaFX图表的另一个图例) 传奇是层叠的(这并不奇怪),但至少我知道我可以渲染它: 因此,为了正确地将它们一个接一个地垂直对齐,我尝试将其添加到父级: legend.getParent().addChildIfPossible( newLegend) 但这会将左上角的附加节点错误地渲染为一些点 我做错了什么?我能以更聪明的方式访问第一个图例的父容器吗 完整的示例源代码可以在中找到,类为.chart legend的节点实际上是com.sun.javafx.

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

传奇是层叠的(这并不奇怪),但至少我知道我可以渲染它:

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

legend.getParent().addChildIfPossible( newLegend)
但这会将左上角的附加节点错误地渲染为一些点

我做错了什么?我能以更聪明的方式访问第一个图例的父容器吗


完整的示例源代码可以在中找到,类为
.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")
    }
}

<> P>因为很明显,图表并不能真正为您提供一个方便的方法来操纵这个传说,您可以考虑为图表创建自己的皮肤作为一个更稳定的解决方案。这样,您可以精确控制图例的显示位置

类为
.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")
    }
}

<> P>因为很明显,图表并不能真正为您提供一个方便的方法来操纵这个传说,您可以考虑为图表创建自己的皮肤作为一个更稳定的解决方案。这样,您可以精确控制图例的显示位置

谢谢。如果可能的话,我会三倍接受,因为它完美地回答了这个问题,解决方案是用kotlin编写的,甚至使用了您伟大的tornadofx api。很高兴为您提供帮助:)谢谢。如果可能的话,我会三倍接受,因为它完美地回答了这个问题,解决方案是用kotlin编写的,甚至使用了您伟大的tornadofx api。很高兴为您提供帮助:)