作者:只属于天天的牛牛 | 来源:互联网 | 2023-01-30 12:33
是否可以使用图表的图例来切换显示/隐藏系列?
我得到了LineChart
一个传奇,有太多,Series
所以你不能很好地读出信息.我想知道是否有可能使用图例切换系列显示/隐藏?
我的大部分名字Series
都很长,看起来非常奇怪,如果它们在传奇中被写了两次,那么你知道颜色属于哪个Series
,第二次除了CheckBox
要切换它们.
编辑1:也许我不清楚,即使没有内置功能,我也可以使用一些输入来查看workaroud的样子,因为我无法想出任何东西.
1> Itai..:
以下是我解决这个问题的方法 - 我不知道任何更简单的内置解决方案
LineChart chart;
for (Node n : chart.getChildrenUnmodifiable()) {
if (n instanceof Legend) {
Legend l = (Legend) n;
for (Legend.LegendItem li : l.getItems()) {
for (XYChart.Series s : chart.getData()) {
if (s.getName().equals(li.getText())) {
li.getSymbol().setCursor(Cursor.HAND); // Hint user that legend symbol is clickable
li.getSymbol().setOnMouseClicked(me -> {
if (me.getButton() == MouseButton.PRIMARY) {
s.getNode().setVisible(!s.getNode().isVisible()); // Toggle visibility of line
for (XYChart.Data d : s.getData()) {
if (d.getNode() != null) {
d.getNode().setVisible(s.getNode().isVisible()); // Toggle visibility of every node in the series
}
}
}
});
break;
}
}
}
}
}
您需要在图表上运行此代码一次(LineChart
在此示例中,您可以将其调整为任何其他图表).我找到了Legend
孩子,然后迭代它的所有项目.我根据名称将图例项目与正确的系列相匹配 - 根据我的经验,他们总是匹配,我找不到更好的方法来匹配它们.然后,只需将正确的事件处理程序添加到该特定图例项即可.