以下是我解决这个问题的方法 - 我不知道任何更简单的内置解决方案
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;
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
您需要在图表上运行此代码一次(LineChart在此示例中,您可以将其调整为任何其他图表).我找到了Legend孩子,然后迭代它的所有项目.我根据名称将图例项目与正确的系列相匹配 - 根据我的经验,他们总是匹配,我找不到更好的方法来匹配它们.然后,只需将正确的事件处理程序添加到该特定图例项即可.
| 归档时间: |
|
| 查看次数: |
3094 次 |
| 最近记录: |