1

我需要能够从 MouseListener 返回一个点,并确定散点图中最近的点。我将 JFreeChart 与 XYDataset 一起使用。

我在我的 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 轴标签的右侧。这意味着当鼠标直接在我的一个数据点上时,我得到一个非零差异!

我该如何解决这种差异?

谢谢,埃里克

4

1 回答 1

1

我会看一下,这里这里ChartMouseListener都有插图。

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

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

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

对于合理的点数,您可以放大Shape,如此此处所示;另见。要调出详细信息,请考虑使用自定义工具提示生成器,在此处进行检查。ShapeUtilities

于 2012-09-19T21:27:29.167 回答