0

单击 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) {
    }
};
4

1 回答 1

0

您可以使用renderer.getLegendItem(). 结果将是null一个不可见的系列。给定 a JFreeChart chartchartMouseClicked()实现可能如下所示:

@Override
public void chartMouseClicked(ChartMouseEvent e) {
    ChartEntity entity = e.getEntity();
    if (entity instanceof LegendItemEntity) {
        LegendItemEntity itemEntity = (LegendItemEntity) entity;
        Comparable key = itemEntity.getSeriesKey();
        XYDataset dataset = (XYDataset) itemEntity.getDataset();
        int seriesIndex = dataset.indexOf(key);
        XYPlot plot = (XYPlot) chart.getPlot();
        int datasetIndex = plot.indexOf(dataset);
        XYItemRenderer renderer = plot.getRenderer();
        LegendItem legendItem = renderer.getLegendItem(datasetIndex, seriesIndex);
        System.out.println(key + " " + datasetIndex + " " + seriesIndex);
        System.out.println(legendItem);
    }
}
于 2012-08-29T01:07:43.477 回答