2013-04-23 48 views
2

我正在尋找一種以編程方式將航點添加到使用JXMapKit(它在Java Swing工具包上運行)顯示的地圖的方法。我想提供列表中的地理座標列表。動態更新擺動標記JXMapKit

回答

3

您必須通過WaypointPainter提供Waypoints並將此畫家傳遞給JXMapViewer。默認情況下,WaypointPainter接受Set<Waypoint>,所以我們可以擴展WaypointPainer與我們自己的類,接受List而不是。

import org.jdesktop.swingx.JXMapKit; 
import org.jdesktop.swingx.JXMapViewer; 
import org.jdesktop.swingx.mapviewer.DefaultWaypoint; 
import org.jdesktop.swingx.mapviewer.Waypoint; 
import org.jdesktop.swingx.mapviewer.WaypointPainter; 

import javax.swing.*; 
import java.util.ArrayList; 
import java.util.HashSet; 
import java.util.List; 

class CustomPainter extends WaypointPainter<JXMapViewer> { 
    public void setWaypoints(List<? extends Waypoint> waypoints) { 
     super.setWaypoints(new HashSet<Waypoint>(waypoints)); 
    } 
} 

public class Waypoints { 
    public static void main(String[] args) { 
     List<DefaultWaypoint> waypoints = new ArrayList<DefaultWaypoint>(); 
     waypoints.add(new DefaultWaypoint(51.5, 0)); 

     JXMapKit jxMapKit = new JXMapKit(); 
     jxMapKit.setDefaultProvider(JXMapKit.DefaultProviders.OpenStreetMaps); 
     CustomPainter painter = new CustomPainter(); 
     painter.setWaypoints(waypoints); 
     jxMapKit.getMainMap().setOverlayPainter(painter); 

     final JFrame frame = new JFrame(); 
     frame.add(jxMapKit); 
     frame.setSize(300, 300); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setLocationRelativeTo(null); 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       frame.setVisible(true); 
      } 
     }); 
    } 
} 
+0

謝謝....它的工作! – 2013-04-24 11:24:46