2010-06-30 6 views

Antwort

5

Erweiterung StandardXYItemLabelGenerator ist oft ein nützlicher Ansatz, aber die mitgelieferte constructors ausreichen. Für diesen Generator, ArgumentIndex die MessageFormat Werte an die Seriennamen entsprechen, Domain und Bereich.

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

Darüber hinaus können Sie einzelne Serie Kennzeichnung steuern mit

renderer.setSeriesItemLabelsVisible(true); 
+0

Siehe auch dieses [Beispiel] (http://stackoverflow.com/a/8932920/230513) für 'StandardCategoryToolTipGenerator'. – trashgod

1

Dies auf dem Renderer gesteuert wird:

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

Danke für die Antwort. Ich habe es versucht, aber es zeigte sich immer noch. Gibt es noch etwas, was ich vorher tun muss? Vielleicht Etiketten zu jedem Grundstück zuweisen? – rmartinus

+0

Ich denke, ich habe es jetzt .. Ich habe meinen eigenen Element-Label-Generator namens "LegendXYItemLabelGenerator (..)" erstellt und es zum Laufen gebracht. Zusätzlich zu "renderer.setBaseItemLabelsVisible (true);" habe ich "renderer.setBaseItemLabelGenerator (new LegendXYItemLabelGenerator (plot.getLegendItems()));" – rmartinus

+0

Ist dies auf einem 'XYAreaRenderer' möglich? Ich versuche, es zum Laufen zu bringen, und ich kann für den 'XYLineAndShapeRenderer', aber derselbe Code funktioniert nicht für den' XYAreaRenderer'. ' – skaz

7

Hier ist der individuelle Label-Generator, die ich erstellt:

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(); 
    } 
} 

und dann habe ich diesen Code zusätzlich zu @ Guilaume Code:

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

und hier ist das Ergebnis:

alt text

+0

+1 für das gute Beispiel. Ich habe einen alternativen Ansatz in einer anderen Antwort vorgeschlagen. – trashgod