package com.vaadin.tests.tickets; import com.vaadin.data.Property.ValueChangeEvent; import com.vaadin.data.Property.ValueChangeListener; import com.vaadin.data.util.IndexedContainer; import com.vaadin.server.LegacyApplication; import com.vaadin.server.Sizeable; import com.vaadin.ui.Button; import com.vaadin.ui.CheckBox; import com.vaadin.ui.HorizontalSplitPanel; import com.vaadin.ui.Layout; import com.vaadin.ui.LegacyWindow; import com.vaadin.ui.Table; import com.vaadin.ui.VerticalLayout; /** * Test class for ticket 1983 */ public class Ticket1983 extends LegacyApplication { @Override public void init() { LegacyWindow main = new LegacyWindow("Test for ticket 1983"); main.setContent(new TestLayout()); setMainWindow(main); } private static class TestLayout extends HorizontalSplitPanel { boolean isLong = true; final Table table = new MyTable(); final String propId = "col"; final String propId2 = "col2"; public TestLayout() { setSplitPosition(200, Sizeable.UNITS_PIXELS); setLocked(true); final HorizontalSplitPanel leftSide = initLeftSide(); setFirstComponent(leftSide); final Layout rightSide = new VerticalLayout(); rightSide.setHeight("100%"); setSecondComponent(rightSide); } private HorizontalSplitPanel initLeftSide() { final HorizontalSplitPanel leftSide = new HorizontalSplitPanel(); leftSide.setHeight("100%"); final IndexedContainer dataSource = new IndexedContainer(); dataSource.addContainerProperty(propId, String.class, null); dataSource.addContainerProperty(propId2, String.class, null); final Object itemId = dataSource.addItem(); dataSource .getItem(itemId) .getItemProperty(propId) .setValue( "Very long value that makes a scrollbar appear for sure"); dataSource .getItem(itemId) .getItemProperty(propId2) .setValue( "Very long value that makes a scrollbar appear for sure"); for (int i = 0; i < 150; i++) { Object id = dataSource.addItem(); dataSource .getItem(id) .getItemProperty(propId) .setValue( (i == 100 ? "Very long value that makes a scrollbar appear for sure" : "Short")); dataSource.getItem(id).getItemProperty(propId2) .setValue("Short"); } table.setSizeFull(); table.setContainerDataSource(dataSource); table.setVisibleColumns(new Object[] { propId }); leftSide.setSecondComponent(table); Button button = new Button("Change col value to short"); button.addListener(new Button.ClickListener() { @Override public void buttonClick(Button.ClickEvent event) { // Change the column value to a short one --> Should remove // the scrollbar if (isLong) { dataSource.getItem(itemId).getItemProperty(propId) .setValue("Short value"); dataSource.getItem(itemId).getItemProperty(propId2) .setValue("Short value"); isLong = false; } else { dataSource .getItem(itemId) .getItemProperty(propId) .setValue( "Very long value that makes a scrollbar appear for sure"); dataSource .getItem(itemId) .getItemProperty(propId2) .setValue( "Very long value that makes a scrollbar appear for sure"); isLong = true; } // Works the same way with or without repaint request table.markAsDirty(); } }); VerticalLayout ol = new VerticalLayout(); ol.addComponent(button); leftSide.setFirstComponent(ol); CheckBox checkBox = new CheckBox("Two col"); checkBox.addListener(new ValueChangeListener() { @Override public void valueChange(ValueChangeEvent event) { if ((Boolean) event.getProperty().getValue()) { table.setVisibleColumns(new Object[] { propId, propId2 }); } else { table.setVisibleColumns(new Object[] { propId }); } } }); ol.addComponent(checkBox); return leftSide; } } static class MyTable extends Table { MyTable() { alwaysRecalculateColumnWidths = true; } } }