Hello Stack Overflow社区,
我是一个Java新手,我正在做一个简单的java项目,我从一个(动态)源获取坐标(lat和lon),并使用JMapViewer(是,而不是JXMapViewer)在地图上显示标记。我已将所有坐标放在两个ArrayList中。 它看起来像是:
for(int i = 0; i < latArrayList.size(); i++){
map.addMapMarker(new MapMarkerDot((double)latArrayList.get(i), (double)longArrayList.get(i)));
}
编辑:map是一个jMapViewer对象。
它工作得很好。 问题是我需要使用Timer每隔20秒刷新一次这个地图,我找到的唯一方法是关闭并打开地图,如下所示:
theMap.setVisible(false);
theMap = new Map();
theMap.setVisible(true);
编辑:theMap是一个对象(jFrame而不是jMapViewer)我在main函数中创建(就像在demo中一样)而且我不能在它上面使用addMapMarker(比如theMap.addMapMarker(150.2,150.2))
而且,你可以想象这很烦人(窗口每20秒关闭并打开,之前的'浏览'会话丢失)。那么有没有办法刷新它?通过动态添加标记还是只刷新内容?
非常感谢。
答案 0 :(得分:2)
我从未使用过该API,但看起来theMap.removeAllMapMarkers();
可以解决问题。然后,您可以再次开始添加新标记。
关于你的循环,如果你用泛型声明你的列表,你就不需要强制转换为double:
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)));
}
答案 1 :(得分:2)
我看到两种方法:
维护现有MapMarker
个实例的集合,并使用提供的不可变removeMapMarker()
实现使用addMapMarker()
后跟MapMarkerDot
。两种方法都会调用repaint()
。
实施MapMarker
界面以创建MutableMapMarkerDot
;根据需要添加任意数量的实例;更新坐标 in situ 并在repaint()
听众中调用javax.swing.Timer
。