JavaFX使用图表图例切换显示/隐藏系列可能吗?

Dan*_*iel 4 java charts javafx legend

是否可以使用图表的图例来切换显示/隐藏系列?

我得到了LineChart一个传奇,有太多,Series所以你不能很好地读出信息.我想知道是否有可能使用图例切换系列显示/隐藏?

我的大部分名字Series都很长,看起来非常奇怪,如果它们在传奇中被写了两次,那么你知道颜色属于哪个Series,第二次除了CheckBox要切换它们.

编辑1:也许我不清楚,即使没有内置功能,我也可以使用一些输入来查看workaroud的样子,因为我无法想出任何东西.

Ita*_*tai 7

以下是我解决这个问题的方法 - 我不知道任何更简单的内置解决方案

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孩子,然后迭代它的所有项目.我根据名称将图例项目与正确的系列相匹配 - 根据我的经验,他们总是匹配,我找不到更好的方法来匹配它们.然后,只需将正确的事件处理程序添加到该特定图例项即可.