1

我正在绘制三个时间序列,我想使用数字 1、3 和 5 作为 XYLineAndShapeRenderer 用于显示序列的实际形状。

即使您没有使用 JFreeChart 的经验,如果我能弄清楚如何执行以下任何操作,我想我可以完成我的任务:

  1. 将字符/字形转换为 java.awt.Shape
  2. 将字符/字形转换为 ImageIcon
4

1 回答 1

2

Font.createGlyphVector您可以使用和获得字形轮廓GlyphVector.getGlyphOutline

下面的方法检索GlyphVector指定的 aString并检索它们的轮廓,AffineTransform在此过程中应用 an。

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;

}

默认情况下,返回的字形形状的字体大小为 1,因此AffineTransform. 一个示例转换是:

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

它应该将每个字形(我认为您需要)以 40 的字体大小大致居中。为了更准确的居中,您可以使用GlyphMetrics,通过获取GlyphVector.getGlyphMetric并计算您需要的确切翻译。

于 2012-04-14T04:36:39.297 回答