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

标签 java javafx charts legend

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

我得到了一个带有图例的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/

相关文章:

java - 为什么在 Java 中将 String 解析为 Date 很慢?我们可以加速吗?

JavaFX mp3音频、mp4音频、文本数据叠加

JavaFX 在网格面板上交换按钮

javafx - JavaFX ContextMenu不会自动隐藏

javascript - plotly.js:如何在一秒钟内绘制 100 个点

iphone - 如何创建比 Core Plot 生成的图表更好看的图表?

java - JDK 11 上的 cucumber

java - 带有临时类实例的垃圾收集

java - 让 Wicket AjaxButton 与浏览器自动完成功能配合使用

charts - 在Labview中使用波形图显示具有自定义时间的点