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、非表示のシリーズになります。を指定するJFreeChart chartと、chartMouseClicked()実装は次のようになります。

@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 に答える