java - 在 JMapViewer 中动态更新标记

标签 java swing jframe markers jmapviewer

Stack Overflow 社区您好,

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

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

编辑: map 是一个 jMapViewer 对象。

而且效果非常好。 问题是我需要使用计时器每 20 秒刷新一次 map ,而我发现的唯一方法是关闭并打开 map ,如下所示:

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

编辑: theMap 是我在主函数中创建的一个对象(jFrame 而不是 jMapViewer)(如演示中所示),并且我无法在其上使用 addMapMarker (如 theMap.addMapMarker(150.2,150.2))

而且,正如您可以想象的那样,这非常烦人(每 20 秒窗口就会关闭和打开一次,之前的“浏览” session 就会丢失)。那么有没有办法刷新呢?通过动态添加标记还是只是刷新内容?

非常感谢。

最佳答案

我从未使用过该 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)));
}

关于java - 在 JMapViewer 中动态更新标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12902396/

相关文章:

java - 比 Box 更高效的布局

java - KeyListener 不改变 JPanel

java - 调用时不会显示字符串

java - 如何在 Android Java 中实现嵌套的 ArrayList 并迭代它们

java - 如何关闭 Ant 控制台中 hbm2ddl 的大部分输出?

swing - 我无法在 NetBeans (jframe) 中进入设计模式

java - 透明JFrame背景

java - 错误: Could not find or load main class ExcelReadWrite

java - 使用 Java 桌面应用程序的 Telegram API?

java - 多个 JPanel 一个在另一个之上