Swing JFreechart subtitle formatieren

ottens

Aktives Mitglied
Hallo Liebe Leute,

ich brauche euere Hilfe und zwar ich soll ein Diagramm mit JFreechart basteln
unten im Diagramm soll links und rechts zwei Texte (String) stehen ?

hat jemand nen Vorschlag bitte ?

Lg

ottens:rtfm:
 
Hier ein Beispielcode
Java:
public class SimpleXYPlot{
	public static void main(String[] args){
	DefaultXYDataset dataset = new DefaultXYDataset();
	dataset.addSeries("Values",new double[][]{{0, 1}, {0, 1}});		
	ValueAxis xAxis = new NumberAxis("x axis");
        NumberAxis yAxis = new NumberAxis("y axis");
        XYItemRenderer renderer = new XYLineAndShapeRenderer();
	XYPlot plot = new XYPlot(dataset, xAxis, yAxis, renderer);
	JFreeChart chart = new JFreeChart(plot);
	BlockContainer bc = new BlockContainer(new BorderArrangement());
	bc.add(new LabelBlock("Links unten"), RectangleEdge.LEFT);
        bc.add(new LabelBlock("Rechts unten"), RectangleEdge.RIGHT);
        bc.add(new EmptyBlock(1000,10));
        CompositeTitle edgeTitle = new CompositeTitle();
        edgeTitle.setPosition(RectangleEdge.BOTTOM);
        edgeTitle.setTitleContainer(bc);
        chart.addSubtitle(0,edgeTitle);
        JFrame frame = new JFrame();
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	frame.getContentPane().add(new ChartPanel(chart));
        frame.pack();
        frame.setVisible(true);
        
	}
}
und ein paar Hinweise:
1. Die Reihenfolge zwischen edgeTitle.setPosition(RectangleEdge.BOTTOM) und edgeTitle.setTitleContainer(bc) ist wichtig. Werden diese Anweisungen in der umgekerten Reihenfolge ausgeführt, werden die beiden LabelBlocks unmittelbar hintereinander links unten im Chart angezeigt. Grund: bei edgeTitle.setTitleContainer(bc) überschreibt der CompositeTitle das BorderArrangement des BlockContainers mit seinem eigenen Arrangement, wobei die Positionsinformationen der LabelBlocks und des EmptyBlocks verloren gehen.
2. Die 0 bei chart.addSubtitle(0,edgeTitle) ist wichtig. Ein JFreeChart verwaltet eine Liste von Title-Objekten, an die mit der addTitle(Title t) Methode neue Title angefügt oder mit addTitle(int index, Title t) an einer Stelle eingefügt werden können. Diese Liste mit Title-Objekten enthält auch die Legende. Die Title´s werden von aussen nach innen gezeichnet, und zwar in der Reihenfolge, in der sie in der Liste gespeichert sind. "Von Aussen nach innen" heisst, dass mehrere Title an der UNterseite des Charts von unten nach oben gerendert werden, Title´s an der rechten Seite des Charts von rechts nach links etc.Wenn du den CompositeTitle einfach mit addSubtitle(edgeTitle) anfügst, wird er über der Legende gezeichnet, so dass die LabelBlocks nicht mehr ganz unten links und rechts positioniert sind. Durch Angabe der 0 wurde der CompositeTitle vor der Legene in die Title-Liste eingefügt und unterhabl der Legende gezeichnet.
 
Hallo Herr Harry Kehn,

ich freue mich auf die Antwort es hat funktioniert brauche nur die Zustimmung
auf Arbeit, sorry habe gerade die Lösung gesehen bedanke mich ganz herzlich.

aber kann man irgendwie die Schriftgröße durch Fontmetrics manipulieren ??
bzw wie schafft man hier ein GraphicsObjekt ohne SWING zu benutzen ??
also ohne paint(Graphics g) und ohne paintComponent(Graphics g).

LG

Ottens
 
Die Schriftgröse eines LabelBlocks kann entweder im KOnstrucktor vorgegeben werden oder später mit setFont(java.awt.Font) geändert werden.
Die Benutzung eines Graphics2D ausserhaln von Swing ist sehr einfach möglich. Ich nehme an du willst Bilder erstellen? versuche mal
Java:
JFreeChart chart = new JFreeChart(plot);
BufferedImage image = new BufferedImage(450,300,BufferedImage.TYPE_4BYTE_ABGR);
Graphics2D g2 = image.createGraphics();
chart.draw(g2, new Rectangle(450, 300));
ImageIO.write(image, "png", new File("filename.PNG"));}}
 

Neue Themen


Zurück
Oben