Search code examples
javajfreechart

Setting series line style and legend size in JFreeChart


I am trying to modify the legend listener from here to make the series line style thicker and make the legend size bigger when a specific legend is clicked.

But I cannot get the following to work:

plot.getLegendItems().get(index).set...

With the below example, the following is written to the console: java.awt.Color[r=192,g=0,b=0]. Why does it not change to java.awt.Color[r=10,g=10,b=225]?

Also, if I write plot.getLegendItems().get(index).getLabelFont() to the console then it returns null.

 ticPlot.addChartMouseListener(new ChartMouseListener() {
    @Override
    public void chartMouseClicked(ChartMouseEvent event) {
        ChartEntity entity = event.getEntity();
        if (entity instanceof LegendItemEntity) {
            LegendItemEntity itemEntity = (LegendItemEntity) entity;
            DataFile files[] = ticDataSets.keySet().toArray(new DataFile[0]);
            Arrays.sort(files, new SimpleSorter());
            int index = -1;
            for (int i = 0; i < files.length; i++) {
                if (files[i].getName().equals(itemEntity.getSeriesKey())) {
                    index = i;
                    break;
                }
            }

            //set the renderer to hide the series
            XYPlot plot = (XYPlot) ticPlot.getChart().getPlot();
            plot.getLegendItems().get(index).setLinePaint(new Color(10,10,255));
            plot.getLegendItems().get(index).setLabelFont(new Font("TimesRoman", Font.PLAIN, 40));
            System.out.println( plot.getLegendItems().get(index).getLinePaint());
            System.out.println(plot.getLegendItems().get(index).getLabelFont());
        }
    }
});

Solution

  • I found the following to work

    XYPlot plot = (XYPlot) ticPlot.getChart().getPlot();
    final XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer) plot.getRenderer(index);
    renderer.setBaseLegendTextFont(new Font("Helvetica", Font.BOLD, 11));
    renderer.setSeriesStroke(0, new BasicStroke(4));'
    

    Wierd why the plot.getLegendItems().get(index).set... does not work?