1

我正在使用 JFreeChart 制作折线图。我想在我的折线图上设置工具提示,但我无法在 Servlet 上这样做。所以请帮我在Servlet上设置工具提示?

XYSeriesCollection dataset = new XYSeriesCollection();
for (int i = 0; i < 2; i++) {

  XYSeries series = new XYSeries("Name"+i);
  for (int j = 0; j < 10; j++) {
    series.add(i+j,j+i*j);
  }
  dataset.addSeries(series);
}

JFreeChart chart= ChartFactory.createXYLineChart("Line Chart Demo 2", "X", "Y", dataset, PlotOrientation.VERTICAL, true, true,false);

XYPlot plot = (XYPlot) chart.getPlot();
plot.setAxisOffset(new RectangleInsets(5.0, 5.0, 5.0, 5.0));
plot.setBackgroundPaint(Color.white);
plot.setDomainGridlinePaint(Color.white);
plot.setRangeGridlinePaint(Color.white);

XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer) plot.getRenderer();
renderer.setShapesVisible(true);
renderer.setShapesFilled(true);

Vector<String> ToolTips1 = new Vector<String>();
for (int j = 0; j < 10; j++)
{
  ToolTips1.add("First: "+j);
}

Vector<String> ToolTips2 = new Vector<String>();
for (int j = 0; j < 10; j++)
{
  ToolTips2.add("Second: "+j);
}

CustomXYToolTipGenerator generator1 = new CustomXYToolTipGenerator();
generator1.addToolTipSeries(ToolTips1);
CustomXYToolTipGenerator generator2 = new CustomXYToolTipGenerator();
generator2.addToolTipSeries(ToolTips2);

renderer.setSeriesToolTipGenerator(0, generator1);
renderer.setSeriesToolTipGenerator(1, generator2);

renderer.setBaseShape(new Ellipse2D.Double(-3.0, -3.0, 8.0, 8.0));
plot.setRenderer(renderer);

response.setContentType("image/png");
RenderedImage chartImage=chart.createBufferedImage(500,500);
ImageIO.write(chartImage,"png",out);
4

2 回答 2

3

您可以使用ChartFactory 构造函数

public static JFreeChart createAreaChart(java.lang.String title,
                     java.lang.String categoryAxisLabel,
                     java.lang.String valueAxisLabel,
                     CategoryDataset dataset,
                     PlotOrientation orientation,
                     boolean legend,
                     boolean tooltips,
                     boolean urls)

使用默认设置创建面积图。此方法返回的图表对象使用 CategoryPlot 实例作为绘图,CategoryAxis 作为域轴,NumberAxis 作为范围轴,AreaRenderer 作为渲染器。

参数:

  • title - 图表标题(允许为空)。
  • categoryAxisLabel - 类别轴的标签(允许为空)。
  • valueAxisLabel - 值轴的标签(允许为空)。
  • dataset - 图表的数据集(允许为空)。
  • 方向 - 绘图方向(不允许为空)。
  • legend - 指定是否需要图例的标志。
  • 工具提示 - 配置图表以生成工具提示?
  • urls - 配置图表以生成 URL?

返回:
面积图。

于 2013-10-10T07:21:19.967 回答
2
 XYToolTipGenerator xyToolTipGenerator = new XYToolTipGenerator()
 {
     public String generateToolTip(XYDataset dataset, int series, int item)
     {
         Number x1 = dataset.getX(series, item);
         Number y1 = dataset.getY(series, item);
         StringBuilder stringBuilder = new StringBuilder();
         stringBuilder.append(String.format("<html><p style='color:#0000ff;'>Serie: '%s'</p>", dataset.getSeriesKey(series)));
         stringBuilder.append(String.format("X:'%d'<br/>", x1.intValue()));
         stringBuilder.append(String.format("Y:'%d'", y1.intValue()));
         stringBuilder.append("</html>");
         return stringBuilder.toString();
     }
 };

 XYLineAndShapeRenderer render = (XYLineAndShapeRenderer) plot.getRenderer();
 render.setBaseToolTipGenerator(xyToolTipGenerator);
于 2015-02-23T17:50:31.777 回答