我正在绘制三个时间序列,我想使用数字 1、3 和 5 作为 XYLineAndShapeRenderer 用于显示序列的实际形状。
即使您没有使用 JFreeChart 的经验,如果我能弄清楚如何执行以下任何操作,我想我可以完成我的任务:
- 将字符/字形转换为 java.awt.Shape
- 将字符/字形转换为 ImageIcon
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
并计算您需要的确切翻译。