2012-04-14 4 views
1

Ich habe drei Zeitreihen, die ich plane, und ich möchte die Zahlen 1, 3 und 5 als die tatsächlichen Formen verwenden, die der XYLineAndShapeRenderer zum Anzeigen der Serie verwendet.Kann ich eine Zahl als Formsymbol verwenden, um Punkte in einem XYPlot in JFreeChart anzuzeigen?

Auch wenn Sie keine Erfahrung mit JFreeChart haben, wenn ich herausfinden kann, wie eine der folgenden Bedingungen zu tun, ich denke, ich meine Aufgabe erfüllen könnte:

  1. Konvertieren einen Zeichen-/Glyphe zu einem java.awt .Shape
  2. Konvertieren eines Zeichen-/Glyphe zu einem ImageIcon

Antwort

2

Sie erhalten Glyphe umreißt Font.createGlyphVector und GlyphVector.getGlyphOutline verwenden.

Die folgende Methode ruft eine GlyphVector für die angegebene String ab und ruft ihre Umrisse ab, wobei ein AffineTransform in diesem Prozess angewendet wird.

static Shape[] getGlyphShapes(Font font, String strGlyphs, AffineTransform transform) { 

    FontRenderContext frc = new FontRenderContext(null, true, true); 
    GlyphVector glyphs = font.createGlyphVector(frc, strGlyphs); 

    int count = glyphs.getNumGlyphs(); 
    Shape[] shapes = new Shape[count]; 
    for (int i = 0; i < count; i ++) { 

     // get transformed glyph shape 
     GeneralPath path = (GeneralPath) glyphs.getGlyphOutline(i); 
     shapes[i] = path.createTransformedShape(transform); 
    } 
    return shapes; 

} 

Standardmäßig sind die zurückgegebenen Glyphenformen der Schriftgröße 1, daher der AffineTransform. Ein Beispiel wäre verwandeln:

  AffineTransform transform = new AffineTransform(); 
      transform.translate(-20, 20); 
      transform.scale(40, 40); 

der jede Glyphe grob Zentrum sollte (was ich nehme an, Sie müssen) bei einer Schriftgröße von 40. Für eine genauere Zentrierung Sie GlyphMetrics verwenden könnte, durch GlyphVector.getGlyphMetric erhalten und Berechnen Sie die genaue Übersetzung, die Sie benötigen.

Verwandte Themen