我需要能够从 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 轴标签的右侧。这意味着当鼠标直接在我的一个数据点上时,我得到一个非零差异!
我该如何解决这种差异?
谢谢,埃里克