Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在不刷新Vaadin中的Google地图的情况下刷新标记?_Java_Google Maps_Vaadin7 - Fatal编程技术网

Java 如何在不刷新Vaadin中的Google地图的情况下刷新标记?

Java 如何在不刷新Vaadin中的Google地图的情况下刷新标记?,java,google-maps,vaadin7,Java,Google Maps,Vaadin7,我正在使用tapio的GoogleMap附加组件和Vaadin 7。除了刷新外,一切似乎都很好。我尝试了一个bean容器,如下所示: BeanContainer<String, GoogleMap> maps; maps = new BeanContainer<String, GoogleMap>(GoogleMap.class); BeanContainer<String, VaadinGoogleMap> map; ... googleMap = new

我正在使用tapio的GoogleMap附加组件和Vaadin 7。除了刷新外,一切似乎都很好。我尝试了一个bean容器,如下所示:

BeanContainer<String, GoogleMap> maps;
maps = new BeanContainer<String, GoogleMap>(GoogleMap.class);
BeanContainer<String, VaadinGoogleMap> map;
...
googleMap = new GoogleMap(new LatLon(39.5, -98.35), 4.0, googleApiKey);
map.addBean(new VaadinGoogleMap("mymap", googleMap);
mapComposite = new MapComposite(map);
...

class MyComposite extends CustomComponent {
    public MyComposite(BeanContainer<String, VaadinGoogleMap> bc) {
        // A layout structure used for composition
        Panel panel = new Panel("My Custom Component");

        // Compose from multiple components
        panel.setContent(bc.getItem("mymap").getBean().getGoogleMap());

        // The composition root MUST be set
        setCompositionRoot(panel);
    }
}
BeanContainer地图;
maps=新的BeanContainer(GoogleMap.class);
当我想添加或删除标记时,我会重新创建GoogleMap并更新Bean容器映射。我尝试了requestRepaintAll,尽管它已被弃用。如果您能指导我如何在不刷新整个页面/地图的情况下刷新标记,我将不胜感激

a) 是否可以只刷新标记而不影响地图

b) 如果Vaadin正在使用Ajax向客户端发送更新,那么如何使其适用于标记

c) 是否可以在不使用javascript location.reload()的情况下使用标记刷新地图


谢谢你

我可以通过CustomComponent实现这一点,如下所示:

BeanContainer<String, GoogleMap> maps;
maps = new BeanContainer<String, GoogleMap>(GoogleMap.class);
BeanContainer<String, VaadinGoogleMap> map;
...
googleMap = new GoogleMap(new LatLon(39.5, -98.35), 4.0, googleApiKey);
map.addBean(new VaadinGoogleMap("mymap", googleMap);
mapComposite = new MapComposite(map);
...

class MyComposite extends CustomComponent {
    public MyComposite(BeanContainer<String, VaadinGoogleMap> bc) {
        // A layout structure used for composition
        Panel panel = new Panel("My Custom Component");

        // Compose from multiple components
        panel.setContent(bc.getItem("mymap").getBean().getGoogleMap());

        // The composition root MUST be set
        setCompositionRoot(panel);
    }
}
BeanContainer地图;
...
谷歌地图=新谷歌地图(新拉特隆(39.5,-98.35),4.0,谷歌地图);
addBean(新的VaadinGoogleMap(“mymap”,googleMap);
mapComposite=新的mapComposite(地图);
...
类MyComposite扩展了CustomComponent{
公共MyComposite(BeanContainer bc){
//用于构图的布局结构
面板面板=新面板(“我的自定义组件”);
//由多个组件组成
setContent(bc.getItem(“mymap”).getBean().getGoogleMap());
//必须设置合成根
setCompositionRoot(面板);
}
}

我现在发现,在单独线程或主线程中运行的GoogleMap.addMarker方法没有实时添加标记。如果我使用thread.sleep(1000),在创建新标记后和调用addMarker之前,标记会正确显示。我想知道为什么需要thread.sleep,以及是否有更好的方法。