Work at SourceForge, help us to make it a better place! We have an immediate need for a Support Technician in our San Francisco or Denver office.

Close

Change order of LegendItems via Postprocessor

2010-06-03
2013-01-13
  • Markus Daniel
    Markus Daniel
    2010-06-03

    Hi everyone,
    I tried to the order of my LegendItems in a CategoryPlot via Postprocessor.
    I have overridden the getLegentItems()-Method in my Postprocessor owned CategoryPlot, but I can not find any possibility to set this Plot into the Chart.

    Is there any possibility to do so?

    TIA

    Markus

     
  • Ulf Dittmer
    Ulf Dittmer
    2010-06-25

    No, you can't set a different Plot object - you need to work with the one that already exists (which you can get at via chart.getPlot()). Then you need to cast that Plot object to the specific Plot subtype that you're working with, after which you can get at the Renderer, and through that at the LegendItem objects - which you can then alter to your heart's content.

     
  • Markus Daniel
    Markus Daniel
    2010-06-26

    Hello,

    thanks a lot for the answer..

    I tried to get the LegendItemCollection plot.getRenderer().getLegendItems(); (plot is a CategoryPlot),
    iterate over the collection LegendItem item = (LegendItem) legendItemIter.next();
    and to change the color of the label.

    I tried to use legendItem.setLabelPaint(Paint paint)
    but it does not change anything.

    What is wrong on my approache?

    I am using jfreechart 1.0.13 and cewolf 1.0.0,
    I tried to change the color of the legendItemLabel via PostProcessor.

    Kind regards,

    Markus

     
  • Ulf Dittmer
    Ulf Dittmer
    2010-06-27

    Here's a postprocessor that changes the label colors on a category plot; I've verified that it works fine. (As an aside, you should use the cewolf distribution from http://www.ulfdittmer.com/code/cewolf.html, not the one downloadable here).

    public class LegendItemPostProcessor implements ChartPostProcessor, Serializable
    {
        public void processChart (Object chart, Map params) {
            CategoryPlot plot = (CategoryPlot) ((JFreeChart) chart).getPlot();
            LegendItemCollection liColl = plot.getLegendItems();
            for (int i = 0; i < liColl.getItemCount(); i++) {
                LegendItem li = liColl.get(i);
                String colorStr = (String) params.get(String.valueOf(i));
                li.setLabelPaint(Color.decode(colorStr));
            }
        }
    }
    <jsp:useBean id="legendItems" class="de.laures.cewolf.example.LegendItemPostProcessor" />
        <cewolf:chartpostprocessor id="legendItems">
            <cewolf:param name="0" value="#FF0000"/>
            <cewolf:param name="1" value="#00FF00"/>
            <cewolf:param name="2" value="#0000FF"/>
            <cewolf:param name="3" value="#FFFFFF"/>
        </cewolf:chartpostprocessor>
    
     
  • Ulf Dittmer
    Ulf Dittmer
    2010-06-27

    Actually, scratch that - it doesn't seem to work; not sure why.