2012-10-15 33 views
2

您好堆棧溢出社區動態更新標記,在JMapViewer

我是一個Java新手,我做的,我拿座標從(動態)源一個簡單的Java項目(緯度和經度),並使用JMapViewer(是的而不是JXMapViewer)在地圖上顯示標記。我已經把所有的座標放在兩個ArrayList中。 它看起來像這樣:

for(int i = 0; i < latArrayList.size(); i++){ 
    map.addMapMarker(new MapMarkerDot((double)latArrayList.get(i), (double)longArrayList.get(i))); 
} 

編輯:地圖是jMapViewer對象。

它工作得很好。 問題是我需要這個地圖使用定時器,我發現的唯一途徑刷新每20秒就是關閉和打開地圖,就像這樣:

theMap.setVisible(false); 
    theMap = new Map(); 
    theMap.setVisible(true); 

編輯:theMap是一個對象(JFrame的不jMapViewer )我創建的主要功能(如在演示),我不能用它addMapMarker(如theMap.addMapMarker(150.2,150.2))

和好,你可以想像這是煩了(每20秒後窗口關閉並打開,之前的「瀏覽」會話丟失)。那麼有沒有辦法刷新它?通過動態添加標記或只刷新內容?

非常感謝。

回答

2

我從來沒有使用該API,但它看起來像theMap.removeAllMapMarkers();會做的伎倆。然後您可以再次添加新的標記。

關於你的循環,如果你有仿製藥申報的清單,你就不必轉換爲雙:

List<Double> latArrayList = new ArrayList<Double>(); 
latArrayList.add(125.87); //or whatever 

for(int i = 0; i < latArrayList.size(); i++){ 
    theMap.addMapMarker(new MapMarkerDot(latArrayList.get(i), longArrayList.get(i))); 
} 
+0

感謝您的名單提示。 關於removeAllMapMarkers,對不起我的錯我使用了相同的名字,但一個是jMapViewer對象,另一個是我在main中創建的對象。 (就像他們給出的演示)。真對不起。將編輯說明。 –

+0

爲什麼不在'map'上調用該方法?看看代碼後,它應該重新繪製自己。我不認爲有必要修改你的JFrame。 – assylias

+0

+1'removeAllMapMarkers()'可以減少對'repaint()'的調用次數。 – trashgod

2

我看到兩種方法:

  • 維持現有MapMarker實例的集合並使用removeMapMarker()後跟addMapMarker()使用提供的不可變MapMarkerDot實現。這兩種方法都調用repaint()

  • 執行MapMarker接口創建MutableMapMarkerDot;根據需要添加儘可能多的實例;更新座標原位並在您的javax.swing.Timer偵聽器中調用repaint()