我正在使用JMapViewer jar在JPanel上显示世界地图。
在地图上我添加了MapMarkerDot's
这些是gps积分。
问题是当我点击地图上的MapMarkerDot
时,我无法使用
找到一个界面或听众来抓住点击并给我
点击MapMarkerDot
身份。
这里的任何人都使用过代码,或者可以给我一些想法。
我不想修改jar源但也许我必须输入一个接口。
我知道这是一个抽象的问题,但希望得到帮助
答案 0 :(得分:2)
回答我自己的问题 基本上通过比较原始x / y计算来解决这个问题 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);
}
}
}
}
答案 1 :(得分:2)
您可以编辑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());
}
}
希望这会有所帮助!欢迎进一步讨论。