2010-06-30 3 views

Répondre

5

étendons StandardXYItemLabelGenerator est souvent une approche utile, mais fourni constructors peut suffire. Pour ce générateur, le MessageFormatArgumentIndex valeurs correspondent au nom de la série , domaine et gamme.

NumberFormat format = NumberFormat.getNumberInstance(); 
format.setMaximumFractionDigits(2); // etc. 
XYItemLabelGenerator generator = 
    new StandardXYItemLabelGenerator("{0} {1} {2}", format, format); 
renderer.setBaseItemLabelGenerator(generator); 
renderer.setBaseItemLabelsVisible(true); 

En outre, vous pouvez contrôler l'étiquetage des séries individuelles avec

renderer.setSeriesItemLabelsVisible(true); 
+0

Voir aussi [exemple] (http://stackoverflow.com/a/8932920/230513) pour 'StandardCategoryToolTipGenerator'. – trashgod

1

Ceci est contrôlé sur le moteur de rendu:

XYPlot plot = (XYPlot) chart.getPlot(); 
XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer) plot.getRenderer(); 
renderer.setBaseItemLabelsVisible(true); 
+0

Merci pour la réponse. J'ai essayé cela mais ça s'est quand même montré maintenant. Y a-t-il autre chose que je devrais probablement faire avant? Peut-être assigner des étiquettes à chaque parcelle? – rmartinus

+0

Je pense que je l'ai eu maintenant .. J'ai créé mon propre générateur d'étiquette d'article appelé "LegendXYItemLabelGenerator (..)" et l'ai mis au travail. En plus de "renderer.setBaseItemLabelsVisible (true);", j'ai ajouté "renderer.setBaseItemLabelGenerator (new LegendXYItemLabelGenerator (plot.getLegendItems()));" – rmartinus

+0

Est-ce possible sur un 'XYAreaRenderer'? J'essaye de le faire fonctionner et je peux pour le 'XYLineAndShapeRenderer' mais le même code ne fonctionne pas pour le' XYAreaRenderer'. – skaz

7

est ici le générateur d'étiquette personnalisée que j'ai créé:

public class LegendXYItemLabelGenerator extends StandardXYItemLabelGenerator 
     implements XYItemLabelGenerator, Cloneable, PublicCloneable, 
     Serializable { 
    private LegendItemCollection legendItems; 

    public LegendXYItemLabelGenerator(LegendItemCollection legendItems) { 
     super(); 
     this.legendItems = legendItems; 
    } 

    @Override 
    public String generateLabel(XYDataset dataset, int series, int item) { 
     LegendItem legendItem = legendItems.get(series); 
     return legendItem.getLabel(); 
    } 
} 

puis-je ajouté ce code, en plus de @ code de Guilaume:

renderer.setBaseItemLabelsVisible(true); 
renderer.setBaseItemLabelGenerator(new LegendXYItemLabelGenerator(plot.getLegendItems())); 

et voici le résultat:

alt text

+0

+1 pour le bon exemple. J'ai suggéré une approche alternative dans une autre réponse. – trashgod