Java 如何在不刷新Vaadin中的Google地图的情况下刷新标记?
我正在使用tapio的GoogleMap附加组件和Vaadin 7。除了刷新外,一切似乎都很好。我尝试了一个bean容器,如下所示: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
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,以及是否有更好的方法。