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

时间:2012-01-08 20:14:30

标签: java gps jmapviewer world-map

我正在使用JMapViewer jar在JPanel上显示世界地图。

在地图上我添加了MapMarkerDot's这些是gps积分。

问题是当我点击地图上的MapMarkerDot时,我无法使用 找到一个界面或听众来抓住点击并给我 点击MapMarkerDot身份。

这里的任何人都使用过代码,或者可以给我一些想法。

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

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

2 个答案:

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

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