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