package com.vaadin.tests.components.table; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import com.vaadin.data.util.BeanItemContainer; import com.vaadin.tests.components.TestBase; import com.vaadin.ui.Form; import com.vaadin.ui.Table; import com.vaadin.ui.TextField; public class KeyboardNavigationDatasourceChange extends TestBase { @Override protected void setup() { List items = new ArrayList(); for (int i = 0; i < 110; i++) { items.add(new MyItem("item" + i, i, null)); } BeanItemContainer c = new BeanItemContainer( MyItem.class, items); Table t = new Table("Test", c); t.setVisibleColumns(new String[] { "nome", "index", "parent" }); t.setSelectable(true); t.setSizeFull(); t.setImmediate(true); TextField f = new TextField("Name"); final Form form = new Form(); // Property p = new ObjectProperty("", String.class); // t.setPropertyDataSource(p); // UNCOMMENT THIS LINE TO SEE BUG // HAPPENING // f.setPropertyDataSource(p); // f.setImmediate(true); t.setPropertyDataSource(f); form.addField("table", t); form.addField("name", f); addComponent(form); } @Override protected String getDescription() { return "When calling setPropertyDataSource on a regular table the keyboard navigation becomes unstable"; } @Override protected Integer getTicketNumber() { return 7446; } public class MyItem implements Serializable { private String nome; private Integer index; protected List children = new ArrayList(); private MyItem parent; public MyItem(String nome, Integer index, List children) { this.nome = nome; this.index = index; if (children != null) { this.children = children; if (children != null) { for (MyItem child : children) { child.setParent(this); } } } } /** * @return the nome */ public String getNome() { return nome; } /** * @param nome * the nome to set */ public void setNome(String nome) { this.nome = nome; } /** * @return the idade */ public Integer getIndex() { return index; } /** * @param idade * the idade to set */ public void setIndex(Integer idade) { index = idade; } /** * @return the children */ public List getChildren() { return children; } /** * @param children * the children to set */ public void setChildren(List children) { this.children = children; } /** * @return the parent */ public MyItem getParent() { return parent; } /** * @param parent * the parent to set */ public void setParent(MyItem parent) { this.parent = parent; } @Override public String toString() { return nome; } } }