Hope it is useful to some people:
Code: Select all
private class ChartMouseObserver implements ChartMouseListener
{
public void chartMouseClicked(ChartMouseEvent event)
{
ChartEntity entity = event.getEntity();
if (entity == null)
{
//the mouse click wasn't directly on an entity, so locate the nearest one
int x = (int) ((event.getTrigger().getX() - chartPanel.getInsets().left) / chartPanel.getScaleX());
int y = (int) ((event.getTrigger().getY() - chartPanel.getInsets().top) / chartPanel.getScaleY());
Point2D point2d = new Point2D.Double(x, y);
double minDistance = Integer.MAX_VALUE;
Collection entities = chartPanel.getChartRenderingInfo().getEntityCollection().getEntities();
for (Iterator iter = entities.iterator(); iter.hasNext();)
{
ChartEntity element = (ChartEntity) iter.next();
if (isDataEntity(element))
{
Rectangle rect = element.getArea().getBounds();
Point2D centerPoint = new Point2D.Double(rect.getCenterX(), rect.getCenterY());
if (point2d.distance(centerPoint) < minDistance)
{
minDistance = point2d.distance(centerPoint);
entity = element;
}
}
}
}
if (entity != null)
{
//TODO - put your logic here
}
}
protected boolean isDataEntity(ChartEntity entity)
{
return ((entity instanceof XYItemEntity) || (entity instanceof CategoryItemEntity) ||
(entity instanceof ContourEntity) || (entity instanceof PieSectionEntity));
}
public void chartMouseMoved(ChartMouseEvent event)
{
}
}