@Override Component getMap() { OpenStreetMapLayer osm = new OpenStreetMapLayer(); osm.setDisplayName("OSM Streets Base"); GoogleStreetMapLayer gsm = new GoogleStreetMapLayer(); gsm.setDisplayName("Google Streets Base"); GoogleHybridMapLayer ghm = new GoogleHybridMapLayer(); ghm.setDisplayName("Google Hybrid Base"); map.addLayer(osm); map.addLayer(gsm); map.addLayer(ghm); map.setCenter(-104.9, 38); map.setZoom(6); map.setSizeFull(); Label l1 = new Label( "The map's base layer state should be synchronized between this OptionGroup and the OL LayerSwitcher."); l1.setSizeUndefined(); final Layer[] layers = {osm, gsm, ghm}; final List<Layer> layerlist = Arrays.asList(layers); final OptionGroup baseLayers = new OptionGroup("Base Layers", layerlist); baseLayers.select(osm.getDisplayName()); baseLayers.setNullSelectionAllowed(false); baseLayers.setImmediate(true); baseLayers.addValueChangeListener( new ValueChangeListener() { public void valueChange(ValueChangeEvent event) { Layer newlayer = (Layer) event.getProperty().getValue(); if (!newlayer.equals(map.getBaseLayer())) { map.setBaseLayer(newlayer); } } }); map.addBaseLayerChangeListener( new BaseLayerChangeListener() { public void baseLayerChanged(BaseLayerChangeEvent event) { Layer newBaseLayer = map.getBaseLayer(); if (!newBaseLayer.equals(baseLayers.getValue())) { baseLayers.select(newBaseLayer); } } }); VerticalLayout vl = new VerticalLayout(); vl.setSizeFull(); vl.addComponent(l1); vl.addComponent(baseLayers); vl.addComponent(map); vl.setExpandRatio(map, 1f); return vl; }