如何从我的JMapViewer世界地图中获取鼠标点击位置



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

希望这会有所帮助!欢迎进一步讨论。

相关内容

  • 没有找到相关文章

最新更新