我有一个LegendItemEntity,我如何获取LegendItem?

问题描述 投票:0回答:1

我有一些代码可以在单击 LegendItemEntity 时隐藏/显示一系列。该代码有效,只是我使用系列的索引作为 LegendItemCollection 中 LegendItem 的索引。问题是有时系列比 LegendItems 更多,并且它们各自的索引并不相同。鉴于我有 LegendItemEntity,如何获取 LegendItem?

private final ChartMouseListener chartMouseListener = new ChartMouseListener() {

    public void chartMouseClicked(ChartMouseEvent cme) {
        ChartEntity entity = cme.getEntity();
        if (entity instanceof LegendItemEntity) {
            LegendItemEntity itemEntity = (LegendItemEntity) entity;
            int index = dataset.getSeriesIndex(itemEntity.getSeriesKey());
            XYPlot plot = (XYPlot) chart.getPlot();
            XYItemRenderer renderer = plot.getRenderer();
            renderer.setSeriesVisible(index, !renderer.isSeriesVisible(index));
            LegendItem legendItem = plot.getLegendItems().get(index);
            if (renderer.isSeriesVisible(index)) {
                legendItem.setLinePaint(renderer.getSeriesPaint(index));
            } else {
                legendItem.setLinePaint(Color.WHITE);
            }
        }
    }

    public void chartMouseMoved(ChartMouseEvent cme) {
    }
};
jfreechart
1个回答
1
投票

您可以使用

renderer.getLegendItem()
。对于不可见系列,结果将为
null
。给定
JFreeChart chart
chartMouseClicked()
的实现可能如下所示:

@Override
public void chartMouseClicked(ChartMouseEvent e) {
    if (e.getEntity() instanceof LegendItemEntity itemEntity) {
        var key = itemEntity.getSeriesKey();
        var dataset = (XYDataset) itemEntity.getDataset();
        int seriesIndex = dataset.indexOf(key);
        var plot = chart.getXYPlot();
        var datasetIndex = plot.indexOf(dataset);
        var renderer = plot.getRenderer();
        LegendItem legendItem = renderer.getLegendItem(datasetIndex, seriesIndex);
        System.out.print(key + " " + datasetIndex + " " + seriesIndex);
        System.out.println(" " + legendItem);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.