Im使用JMapViewer jar在JPanel上显示世界地图。
在地图上添加MapMarkerDot's
,这是gps点。
问题是当我点击地图上的MapMarkerDot
时,我无法
找到一个界面或监听器来点击并给我
单击MapMarkerDot
标识。
这里有人处理过代码吗?或者可以给我一些想法。
我不想修改jar源代码,但可能我必须输入一个接口。
我知道这是一个抽象的问题,但希望得到的帮助
回答我自己的问题
通过比较
MapMarker位置相对于鼠标单击位置。
if (e.getButton() == MouseEvent.BUTTON1) {
Point p = e.getPoint();
int X = p.x+3;
int Y = p.y+3;
List<MapMarker> ar = map.getMapMarkerList();
Iterator<MapMarker> i = ar.iterator();
while (i.hasNext()) {
MyMapMarkerDot mapMarker = (MyMapMarkerDot) i.next();
if(mapMarker.position != null){
int centerX = mapMarker.position.x;
int centerY = mapMarker.position.y;
// calculate the radius from the touch to the center of the dot
double radCircle = Math.sqrt( (((centerX-X)*(centerX-X)) + (centerY-Y)*(centerY-Y)));
// if the radius is smaller then 23 (radius of a ball is 5), then it must be on the dot
if (radCircle < 8){
ShowClickedUser(mapMarker.Tag);
}
}
}
}
您可以编辑DefaultMapController.java的代码:
public void mouseClicked(MouseEvent e) {
if(e.getClickCount() == 1 && e.getButton() == MouseEvent.BUTTON1){
Point p = e.getPoint();
int X = p.x+3;
int Y = p.y+3;
List<MapMarker> ar = map.getMapMarkerList();
Iterator<MapMarker> i = ar.iterator();
while (i.hasNext()) {
MapMarker mapMarker = (MapMarker) i.next();
Point MarkerPosition = map.getMapPosition(mapMarker.getLat(), mapMarker.getLon());
if( MarkerPosition != null){
int centerX = MarkerPosition.x;
int centerY = MarkerPosition.y;
// calculate the radius from the touch to the center of the dot
double radCircle = Math.sqrt( (((centerX-X)*(centerX-X)) + (centerY-Y)*(centerY-Y)));
// if the radius is smaller then 23 (radius of a ball is 5), then it must be on the dot
if (radCircle < 8){
System.out.println(mapMarker.toString() + " is clicked"); }
}
}
}
else if (doubleClickZoomEnabled && e.getClickCount() == 2 && e.getButton() == MouseEvent.BUTTON1) {
map.zoomIn(e.getPoint());
}
}
希望这会有所帮助!欢迎进一步讨论。