如何在JFreeChart散点图中找到最近的鼠标点?

时间:2012-09-19 19:54:27

标签: java jfreechart

我需要能够从MouseListener返回一个点,并识别散点图中的最近点。我正在使用带有XYDataset的JFreeChart。

我在ChartPanel中添加了一个鼠标监听器,并尝试将这些x,y值与我遍历数据并检查其位置时返回的值进行比较。我的代码看起来像这样:

ValueAxis domainAxis = chartPanel.getXYPlot().getDomainAxis();
ChartArea chartArea = chartPanel.getChartRenderingInfo().getChartArea();

for(int i=0; i < myXYData.getItemCount(0); i++) {
    double mouseX = e.getX(); // e is the MouseEvent
    double pointX = domainAxis.valueToJava2D(myXYData.getX(0, i), chartArea, RectangleEdge.BOTTOM);
    System.out.println("difference is " + (pointX - mouseX));
}

问题是MouseEvent是报告相对于ChartPanel左上角的点,因此(0,0)位于标题上方,左侧是x轴标签。但是,valueToJava2D方法给出了相对于绘制值的区域的值,因此(0,0)低于图形标题和x轴标签的右侧。这意味着当鼠标直接位于我的一个数据点上时,我得到非零差异!

我如何解决这种差异?

感谢, 埃里克

1 个答案:

答案 0 :(得分:1)

我会看一下ChartMouseListener,图示为herehere

如果这还不够,您可能必须要查看轴,区域和边缘有意义。

它可能有助于解释目标,而不是您当前的方法。或者,修改您的问题以包含显示您当前方法的sscce。可以找到许多简短的例子here

附录:最大积分的实际限制非常小。

对于合理数量的积分,您可以放大Shape,如图所示herehere;另见ShapeUtilities。要调出详细信息,请考虑自定义工具提示生成器,检查here