Reputation: 492
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
Reputation: 51
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
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:
Returns:
An area chart.
Upvotes: 3