1
我有三個時間系列,我正在繪製,我想用數字1,3和5作爲XYLineAndShapeRenderer用來顯示系列的實際形狀。我可以使用數字作爲用於在JFreeChart中顯示XYPlot上的點的形狀圖標嗎?
即使你有使用JFreeChart的,如果我能想出如何做到以下任何沒有經驗,我想我可以完成我的任務:
- 轉換字符/字形的java.awt中.Shape
- 轉換字符/字形到一個ImageIcon
我有三個時間系列,我正在繪製,我想用數字1,3和5作爲XYLineAndShapeRenderer用來顯示系列的實際形狀。我可以使用數字作爲用於在JFreeChart中顯示XYPlot上的點的形狀圖標嗎?
即使你有使用JFreeChart的,如果我能想出如何做到以下任何沒有經驗,我想我可以完成我的任務:
您可以獲取字形輪廓使用Font.createGlyphVector
和GlyphVector.getGlyphOutline
。
以下方法爲指定的String
檢索GlyphVector
並檢索其輪廓,並在該過程中應用AffineTransform
。
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
得到和計算你需要的確切的翻譯。