Как я могу получить положение щелчка мыши на моей карте мира JMapViewer - PullRequest
3 голосов
/ 09 января 2012

Я использую банку JMapViewer , чтобы показать карту мира на JPanel.

На карте я добавляю MapMarkerDot's, которые являются точками GPS.

Проблема в том, что когда я нажимаю MapMarkerDot на карте, я не могу
найдите интерфейс или слушателя, чтобы поймать щелчок и дать мне
нажал MapMarkerDot личность.

Кто-нибудь здесь работал с кодом или может дать мне несколько идей, что делать.

Я не хотел бы изменять исходный код jar, но, возможно, мне нужно ввести интерфейс.

Я знаю, что это своего рода абстрактный вопрос, но надеюсь на помощь

Ответы [ 2 ]

2 голосов
/ 21 января 2013

Вы можете редактировать код 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());
    }
}

Надеюсь, это поможет!Добро пожаловать на дальнейшее обсуждение.

2 голосов
/ 18 января 2012

Отвечая на мой собственный вопрос.
По сути, решил эту проблему путем необработанных вычислений 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);
            }

        }
    }
}
...