2012-05-18 11 views
1

У меня есть приложение Vaadin. Одним из его компонентов является таблица. Мне нужна возможность добавить столько столбцов, сколько хочет пользователь (ну, допустим, максимум 20 на данный момент) к этой таблице. В начале есть 5 колонок, поэтому на самом деле пользователь может добавить столбец 6-20. Однако после выполнения «layout.addComponent (...)» эта таблица больше не редактируется.Vaadin - генерировать таблицу динамически

Я попробовал 2 вещи:

  1. Существует переменная, которая хранит текущее количество строк и увеличивается на 1 за каждый клик на кнопку «Добавить». При каждом нажатии в таблицу добавляется 1 столбец.

  2. Другая идея состояла в том, чтобы удерживать номера столбцов в переменной (например, идея 1) и значение ячеек где-то в коллекции (независимо). После нажатия кнопки «Добавить» вся таблица удаляется, затем все столбцы добавляются (все, что было там + новое), и добавляется в макет.

Однако ни одна из этих идей не работает.

Любые предложения?

ответ

0

Я думаю, этого должно быть достаточно, чтобы вызвать addContainerProperty на Container, который связан с вашим Table. Это должно привести к таблице PropertySetChangeEvent.

Если, конечно, если вы ограничены видимыми столбцами, используя Table.setVisibleColumns.

Если это не поможет вам, часть кода поможет решить проблему.

0

Если MyContainer расширяет IndexedContainer, у вас есть полная свобода; так же, как образец, у меня есть статистика, которая просто (динамическая) Карта сериализованные в Zookeeper и MyContainer слушает Zookeeper изменения:

public class MyContainer extends IndexedContainer { 
    ... 
    public void process(final ModelChangeEvent event) { 
     ... 
     for (Map.Entry<String, Long> entry : newTask.getCounters().entrySet()) { 
      addContainerProperty(entry.getKey(), Long.class, 0L); 
      Property property = getContainerProperty(taskName, entry.getKey()); 
      property.setValue(entry.getValue()); 
     } 
     fireContainerPropertySetChange(); 
     ... 
    } 

Когда мы добавляем новую (ключ, значение) пару на карту, мы получим новые столбец автоматически, где «ключ» - это заголовок столбца, а «значение» - значение ячейки. Не нужно называть «огонь»; он будет автоматически вызван реализацией IndexedContainer (проверьте источники).

Смежные вопросы