1

I am working on a line chart using JFreeChart. I want to set tool tips on my line chart but I am unable to do that on Servlet. So please help me to set tool tips on 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);
Duncan Jones
  • 67,400
  • 29
  • 193
  • 254
varun
  • 472
  • 4
  • 8
  • 24

2 Answers2

3

You can use ChartFactory constructor

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)

Creates an area chart with default settings. The chart object returned by this method uses a CategoryPlot instance as the plot, with a CategoryAxis for the domain axis, a NumberAxis as the range axis, and an AreaRenderer as the renderer.

Parameters:

  • title - the chart title (null permitted).
  • categoryAxisLabel - the label for the category axis (null permitted).
  • valueAxisLabel - the label for the value axis (null permitted).
  • dataset - the dataset for the chart (null permitted).
  • orientation - the plot orientation (null not permitted).
  • legend - a flag specifying whether or not a legend is required.
  • tooltips - configure chart to generate tool tips?
  • urls - configure chart to generate URLs?

Returns:
An area chart.

Aniket Kulkarni
  • 12,825
  • 9
  • 67
  • 90
3
 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);
  • 5
    If I might make a suggestion, some description of what your code does might help the questioner. – Rüdiger Herrmann Feb 23 '15 at 17:59
  • Thaks @RüdigerHerrmann ! I don't know exactly where is the problem the in varun's code. But I have a sample code that does what he wants. This might be useful =]. – Cristiano Borges Cardoso Feb 23 '15 at 18:25
  • I upvoted it because the key here is the `setBaseToolTipGenerator()` that is missing in the other answer. But I agree with @RüdigerHerrmann: a bit of text explaining that would have been nice. – Matthieu Oct 21 '21 at 12:52