【发布时间】:2012-09-12 04:30:20
【问题描述】:
我需要能够获取从 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 轴标签的右侧。这意味着当鼠标直接在我的一个数据点上时,我得到一个非零差异!
如何解决这种差异?
谢谢, 埃里克
【问题讨论】:
-
交叉发布here。
标签: java jfreechart