2012-01-08 85 views
3

使用JMapViewer jar来显示JPanel上的世界地图。如何从我的JMapViewer世界地图中获取鼠标点击位置

在地图上即时添加MapMarkerDot's哪些是GPS点。

问题是,当我在地图上点击MapMarkerDot我不能
找到一个接口或监听器来捕捉点击给我
点击MapMarkerDot身份。

有人在这里工作的代码或可以给我一些想法做什么。

我不想修改jar源代码,但也许我必须输入一个接口。

我知道这是一种抽象的问题,但希望帮助

回答

2

回答我的问题。
基本上通过比较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); 
      } 

     } 
    } 
} 
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()); 
    } 
} 

希望这将帮助!欢迎进一步讨论。

相关问题