1

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 つの上にあるときにゼロ以外の差が得られることを意味します。

この格差を解消するにはどうすればよいでしょうか。

ありがとう、エリック

4

1 に答える 1

1

ここここChartMouseListenerに示されている を見てください。

それでも十分でない場合は、領域とエッジが意味を持つ軸を見る必要があるかもしれません。

現在のアプローチではなく、目標を説明すると役立つ場合があります。または、質問を編集して、現在のアプローチを示すsscceを含めます。多くの短い例がここにあります。

補遺:ポイントの最大数に対する実際の制限は非常に小さいです。

適切な数のポイントについては、ここここShapeに示すようにを拡大できます。も参照してください。詳細を呼び出すには、ここで調べたカスタム ツールチップ ジェネレーターを検討してくださいShapeUtilities

于 2012-09-19T21:27:29.167 に答える