varun
varun

Reputation: 492

How to set tooltip on my JFreeChart?

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);

Upvotes: 1

Views: 10677

Answers (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);

Upvotes: 3

Aniket Kulkarni
Aniket Kulkarni

Reputation: 12983

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.

Upvotes: 3

Related Questions