如何向 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")
}
}
由于很明显图表并未真正为您提供操纵图例的便捷方式,您可以考虑为图表创建自己的皮肤作为更稳定的解决方案。这样您就可以准确控制图例的显示位置。
添加自定义节点(在我的例子中是 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")
}
}
由于很明显图表并未真正为您提供操纵图例的便捷方式,您可以考虑为图表创建自己的皮肤作为更稳定的解决方案。这样您就可以准确控制图例的显示位置。