是否可以使用图表的图例来切换显示/隐藏系列?
我得到了一个带有图例的LineChart
,但是Series
太多了,所以你不能很好地读出信息。我想知道是否有可能使用图例来切换系列以显示/隐藏?
我的 Series
的大多数名称都很长,如果它们在图例中写两次,看起来很奇怪,所以你知道哪种颜色属于哪个 Series
第二次使用 CheckBox
来切换它们。
Edit1:也许我不清楚,即使没有内置函数,我也可以使用一些输入来了解解决方法的样子,因为我想不出任何东西。
最佳答案
这是我解决这个问题的方法——我不知道有任何更简单的内置解决方案
LineChart<Number, Number> chart;
for (Node n : chart.getChildrenUnmodifiable()) {
if (n instanceof Legend) {
Legend l = (Legend) n;
for (Legend.LegendItem li : l.getItems()) {
for (XYChart.Series<Number, Number> 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<Number, Number> d : s.getData()) {
if (d.getNode() != null) {
d.getNode().setVisible(s.getNode().isVisible()); // Toggle visibility of every node in the series
}
}
}
});
break;
}
}
}
}
}
您需要在您的图表上运行此代码一次(本例中为 LineChart
,但您可能可以将其改编为任何其他图表)。我找到 Legend
子项,然后遍历它的所有项。我根据名称将图例项目与正确的系列相匹配——根据我的经验,它们总是匹配的,而且我找不到更好的方法来匹配它们。然后只需将正确的事件处理程序添加到该特定图例项即可。
关于JavaFX 使用图表图例可以切换显示/隐藏系列吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44956955/