我试图在JPanel上为图像(基本上是地图上的图块)实现鼠标单击事件。我只是无法弄清楚如何去做。我有一个扩展JPanel的Main类。我从tile服务器检索tile并根据特定的缩放级别在Main类的paintComponent()方法中显示它们。我使用微小的定位器图像来表示同一个paintComponent()方法中的特定纪念碑或城市中的建筑物。它们根据相应的纬度和经度放置在这些瓷砖的顶部。
当我点击这些定位器图像时,我必须能够将事件MouseClick()添加到定位器图像。现在我到目前为止所读到的是我们无法为图像添加事件处理程序。它只能添加到swing的原生组件中。当我没有使用JLabel表示事件时,如何将事件添加到微小的定位器图像中,或者甚至用图像说明用矩形表示?
答案 0 :(得分:3)
在具有合适投影的足够小的地图上,您可以使用相对于封闭面板的linear interpolation在坐标系之间进行转换。注意以下比例,您可以交叉乘法并求解缺失的坐标,如将鼠标坐标映射到图像中的像素坐标的完整example所示。
mouse.x : panelWidthInPixels :: featureLongitude : tileWidthInDegrees
mouse.y : panelHeightInPixels :: featureLatitude : tileHeightInDegrees
更一般地说,使用像JMapViewer
这样的库,将地图的投影合并到转换中。概述了命中测试功能的模式here。