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

Java 如何在JFreeChart散点图中找到离鼠标最近的点?,java,jfreechart,Java,Jfreechart,我需要能够获取鼠标测试器返回的点,并在散点图中确定最近的点。我正在使用带有XYDataset的JFreeChart 我在ChartPanel中添加了一个鼠标侦听器,试图将这些x,y值与迭代数据并检查其位置时返回的值进行比较。我的代码如下所示: ValueAxis domainAxis = chartPanel.getXYPlot().getDomainAxis(); ChartArea chartArea = chartPanel.getChartRenderingInfo().getChart

我需要能够获取鼠标测试器返回的点,并在散点图中确定最近的点。我正在使用带有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));
}
ValueAxis domainAxis=chartPanel.getXYPlot().getDomainAxis();
ChartArea ChartArea=chartPanel.getChartRenderingInfo().getChartArea();
对于(int i=0;i
问题是MouseeEvent报告的点相对于ChartPanel的左上角,因此(0,0)位于标题上方,x轴标签的左侧。然而,valueToJava2D方法给出的值与绘制值的区域相关,因此(0,0)位于图形标题下方和x轴标签的右侧。这意味着,当鼠标直接在我的一个数据点上时,我会得到一个非零的差异

我怎样才能解决这个差距

谢谢,
埃里克

我会看一个
图表鼠标听者
,插图和图片

如果这还不够,您可能必须查看轴,其中区域和边具有意义

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

附录:最大点数的实际限制非常小


对于合理数量的点,可以放大
形状
,如图和所示;另见。要调用细节,请考虑一个自定义工具提示生成器,检查。

< P> >我看一个代码> ChartMouseListener < /C>,图解和./P> 如果这还不够,您可能必须查看轴,其中区域和边具有意义

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

附录:最大点数的实际限制非常小


对于合理数量的点,可以放大
形状
,如图和所示;另见。为了调用细节,考虑一个定制的工具提示生成器,检查。

当鼠标直接在图形中的一个点上时,ChartMouseListener的工作效果很好。但是,我希望当鼠标不直接在某个点上时,能够找到最近的点。有什么想法吗?我的目标是当鼠标仅仅靠近一个点,而不是直接在它上面时,向用户提供有用的反馈。一个“最接近的”匹配肯定需要使用一些合适的度量对数据集进行迭代。由于这似乎是资源密集型的,您可以详细说明目标吗?该图表示对国际象棋服务器的游戏请求。图表看起来不错,但点有点小。我想让用户接受游戏的有效点击区域变大,而不改变图形的美感。我还想在用户“接近”点时提供有关挑战的信息(评级、时间等),而不需要太多的精度,以便他们将鼠标精确地放在挑战点上。最大点的实际限制非常小,因此迭代和计算的时间不是问题。啊,这是有道理的。我已经在上面提出了一些简单的替代方案。感谢您花时间提出这些解决方案。使形状变大一点是一种改进。我想结论是,您不知道如何找到从图表面板左上角到绘图左上角的偏移量。哦,好吧。我想这就是他们给我们源代码的原因…:)当鼠标直接位于图形中的一个点上时,ChartMouseListener工作得非常好。但是,我希望当鼠标不直接在某个点上时,能够找到最近的点。有什么想法吗?我的目标是当鼠标仅仅靠近一个点,而不是直接在它上面时,向用户提供有用的反馈。一个“最接近的”匹配肯定需要使用一些合适的度量对数据集进行迭代。由于这似乎是资源密集型的,您可以详细说明目标吗?该图表示对国际象棋服务器的游戏请求。图表看起来不错,但点有点小。我想让用户接受游戏的有效点击区域变大,而不改变图形的美感。我还想在用户“接近”点时提供有关挑战的信息(评级、时间等),而不需要太多的精度,以便他们将鼠标精确地放在挑战点上。最大点的实际限制非常小,因此迭代和计算的时间不是问题。啊,这是有道理的。我已经在上面提出了一些简单的替代方案。感谢您花时间提出这些解决方案。使形状变大一点是一种改进。我想结论是,您不知道如何找到从图表面板左上角到绘图左上角的偏移量。哦,好吧。我想这就是他们给我们源代码的原因…:)交叉张贴,交叉张贴。