动态更新标记在JMapViewer(Dynamically updating markers in

2019-09-24 04:12发布

您好堆栈溢出社区,

我是一个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秒的窗口关闭,打开,前面的“浏览”会话丢失)。 那么,有没有一种方法来刷新呢? 通过动态地添加标记或刚刚刷新的内容?

非常感谢。

Answer 1:

我从来没有使用的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)));
}


Answer 2:

我看到两种方法:

  • 维护现有的集合MapMarker实例和使用removeMapMarker()然后addMapMarker()使用不变MapMarkerDot提供的实现。 这两种方法调用repaint()

  • 实现MapMarker界面来创建一个MutableMapMarkerDot ; 添加所需的多个实例; 更新现场坐标和调用repaint()在你的javax.swing.Timer监听器。



文章来源: Dynamically updating markers in JMapViewer