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 軸ラベルの右側にあります。これは、マウスがデータ ポイントの 1 つの上にあるときにゼロ以外の差が得られることを意味します。
この格差を解消するにはどうすればよいでしょうか。
ありがとう、エリック