3

我想在角落里用时间戳装饰我生成的所有 JFreeCharts。在生成图表后,JFreeChart 框架中有没有办法在图像上绘制?

编辑:请注意,这些图表是在后台线程中生成并通过 servlet 分发的,因此没有 GUI,我不能只在单独的组件上显示时间戳。

4

5 回答 5

4

一种方法是继承 ChartPanel 并覆盖该paint(Graphics)方法以首先链接super.paint(Graphics)并随后在图表顶部呈现附加文本。

不过,这对我来说有点 hacky,我个人更喜欢简单地将与表示时间戳一起添加ChartPanel到另一个容器中。JPanelJLabel

于 2010-11-16T17:16:19.503 回答
1

在此处查看此论坛帖子:

http://www.jfree.org/phpBB2/viewtopic.php?f=3&t=27939

使用 ImageIcon 作为水印:

ImageIcon icon = new ImageIcon(new URL(watermarkUrl));
Image image = icon.getImage();
chart.setBackgroundImage(image);
chart.setBackgroundImageAlignment(Align.CENTER);
chart.getPlot().setBackgroundAlpha(0.2f);
于 2010-11-16T17:17:31.550 回答
1

addSubtitle()方法org.jfree.chart.JFreeChart可以是合适的替代方案。

于 2010-11-17T15:15:12.600 回答
1

又摸索了一番,我找到了一个解决方案,可以让您在 JFreeChart 完成后在图像上任意绘制,因此我将其发布在这里以供后代使用。就我而言,我正在将图表写入 OutputStream,所以我的代码如下所示:

BufferedImage chartImage = chart.createBufferedImage(width, height, null);
Graphics2D g = (Graphics2D) chartImage.getGraphics();
/* arbitrary drawing happens here */
EncoderUtil.writeBufferedImage(chartImage, ImageFormat.PNG, outputStream);
于 2010-11-18T18:28:22.610 回答
0

根据我的经验,将自定义信息添加到 JFreeChart 的最佳方法是: - 实例化一个相同类型的图表的 BufferedImage;- 在 BufferedImage 上绘制;- 使用 XYImageAnnotation 将图像添加到当前绘图。

这是代码的指南:

// retrieve image type and create another BufferedImage
int imgType = chart.createBufferedImage(1,1).getType();
BufferedImage bimg = new BufferedImage(width, height, bimg.getType);

// here you can draw inside the image ( relative x & y  )
Graphics2D g2 = (Graphics2D) bimg.getGraphics();
g2.drawString("Hello, JFreeChart " + timestamp, posX, posY );

// instantiate the image annotation, then add to the plot
XYImageAnnotation a = new XYImageAnnotation( x, y, bimg, RectangleAnchor.LEFT );
chart.getPlot().addAnnotation( a );
于 2013-01-28T16:29:23.373 回答