2

你好 Stack Overflow 社区,

我是一个 Java 新手,我正在做一个简单的 Java 项目,我从(动态)源获取坐标(纬度和经度)并使用 JMapViewer(是的,不是 JXMapViewer)在地图上显示标记。我已将所有坐标放在两个 ArrayList(s) 中。它看起来像这样:

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 秒窗口关闭和打开一次,并且之前的“浏览”会话会丢失)。那么有没有办法刷新呢?通过动态添加标记还是仅刷新内容?

非常感谢。

4

2 回答 2

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)));
}
于 2012-10-15T19:15:09.723 回答
2

我看到两种方法:

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

  • 实现MapMarker接口以创建一个MutableMapMarkerDot;根据需要添加尽可能多的实例;更新原位坐标并repaint()在您的javax.swing.Timer侦听器中调用。

于 2012-10-16T01:03:04.440 回答