3

JMapViewer jar を使用して、JPanel に世界地図を表示しています。

マップ上MapMarkerDot'sに、GPS ポイントを追加します。

問題はMapMarkerDot、マップをクリックする
と、クリックをキャッチして
クリックされたMapMarkerDotID を取得するためのインターフェイスまたはリスナーが見つからないことです。

ここでコードを操作した人はいますか、何をすべきかについていくつかのアイデアを教えてくれます。

jar ソースを変更したくありませんが、インターフェースを入力する必要があるかもしれません。

これは一種の抽象的な質問であることは承知していますが、助けを求めています

4

2 に答える 2

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

        }
    }
}
于 2012-01-18T07:24:59.837 に答える
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());
    }
}

これが役立つことを願っています!さらなる議論へようこそ。

于 2013-01-21T11:14:35.483 に答える