使用JMapViewer jar来显示JPanel上的世界地图。如何从我的JMapViewer世界地图中获取鼠标点击位置
在地图上即时添加MapMarkerDot's
哪些是GPS点。
问题是,当我在地图上点击MapMarkerDot
我不能
找到一个接口或监听器来捕捉点击给我
点击MapMarkerDot
身份。
有人在这里工作的代码或可以给我一些想法做什么。
我不想修改jar源代码,但也许我必须输入一个接口。
我知道这是一种抽象的问题,但希望帮助
使用JMapViewer jar来显示JPanel上的世界地图。如何从我的JMapViewer世界地图中获取鼠标点击位置
在地图上即时添加MapMarkerDot's
哪些是GPS点。
问题是,当我在地图上点击MapMarkerDot
我不能
找到一个接口或监听器来捕捉点击给我
点击MapMarkerDot
身份。
有人在这里工作的代码或可以给我一些想法做什么。
我不想修改jar源代码,但也许我必须输入一个接口。
我知道这是一种抽象的问题,但希望帮助
回答我的问题。
基本上通过比较MapMarker的位置和鼠标点击位置的
的原始x/y计算来解决这个问题。
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());
}
}
希望这将帮助!欢迎进一步讨论。