package com.vaadin.tests.components; import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.Button.ClickListener; import com.vaadin.ui.CustomComponent; import com.vaadin.ui.Layout; import com.vaadin.ui.Panel; import com.vaadin.ui.TabSheet; import com.vaadin.ui.VerticalLayout; public class CustomComponentwithUndefinedSize extends TestBase { @Override protected String getDescription() { return "A custom component with no size definition should not prevent scrollbars from being shown when its contents is larger than its parent"; } @Override protected Integer getTicketNumber() { return 2459; } @Override protected void setup() { TabSheet tabs = new TabSheet(); tabs.setSizeFull(); MyCustomComponent mcc = new MyCustomComponent(); mcc.setSizeUndefined(); // Doesn't work tabs.addTab(mcc, "Doesn't work (CustomComponent)", null); // Works: tabs.addTab(mcc.buildLayout(), "Works (no CustomComponent, same layout)", null); addComponent(tabs); getLayout().setSizeFull(); } private int step = 0; public class MyCustomComponent extends CustomComponent { public MyCustomComponent() { setCompositionRoot(buildLayout()); } public Layout buildLayout() { VerticalLayout layout = new VerticalLayout(); VerticalLayout panelLayout = new VerticalLayout(); panelLayout.setMargin(true); final Panel widePanel = new Panel("too big", panelLayout); widePanel.setSizeUndefined(); widePanel.setWidth("2000px"); widePanel.setHeight("200px"); layout.addComponent(widePanel); Button button = new Button("Change panel size", new ClickListener() { @Override public void buttonClick(ClickEvent event) { switch (step++ % 4) { case 0: widePanel.setWidth("200px"); break; case 1: widePanel.setHeight("2000px"); break; case 2: widePanel.setWidth("2000px"); break; case 3: widePanel.setHeight("200px"); break; } } }); panelLayout.addComponent(button); layout.setSizeUndefined(); return layout; } } }