在地图中的图块上实现鼠标单击事件

Implementing a mouse click event on a tile in a map

我正在尝试为 JPanel 上的图像(基本上是地图上的图块)实现鼠标单击事件。我只是不知道该怎么做。我有一个扩展 JPanel 的 Main class。我正在从图块服务器检索图块,并根据特定的缩放级别在 Main class 的 paintComponent() 方法中显示它们。我在相同的 paintComponent() 方法中使用微小的定位器图像来表示城市中的特定纪念碑或建筑物。它们根据相应的纬度和经度放置在这些瓷砖的顶部。

当我单击这些定位器图像时,我必须能够将事件 MouseClick() 添加到定位器图像。到目前为止,我所读到的是我们无法向图像添加事件处理程序。它只能添加到 swing 的原生组件中。当我没有使用 JLabel 或什至用矩形围绕图像表示事件时,如何将事件添加到微小的定位器图像?

在具有合适投影的足够小的地图上,您可以使用 linear interpolation relative to the enclosing panel. Noting the following proportions, you can cross-multiply and solve for the missing coordinate, as shown in this complete example 在坐标系之间转换,将鼠标坐标映射到图像中的像素坐标。

mouse.x : panelWidthInPixels :: featureLongitude : tileWidthInDegrees
mouse.y : panelHeightInPixels :: featureLatitude : tileHeightInDegrees

更一般地说,使用像 JMapViewer that incorporates the map's projection into the transformation. A schema for hit-testing features is outlined here 这样的库。