2012-05-18 146 views
1

我有一個Vaadin應用程序。它的一個組成部分是桌子。我需要添加儘可能多的用戶需要的列(當然,我們假設目前爲20個)。在開始時,有5個列,所以實際上用戶可以添加第6列到第20列。 但是,在執行「layout.addComponent(...)」之後,此表不能再編輯。Vaadin - 動態生成表格

我想兩兩件事:

  1. 有存儲行的當前數量,並在每次點擊增加1上的「添加」按鈕的變量。隨着每次點擊,1列被添加到表中。

  2. 另一個想法是把列號保存在一個變量(比如想法1)和一個集合中某個地方的單元格的值(不管)。點擊「添加」按鈕後,整個表格被刪除,然後所有的列都被添加(所有已經出現的+新的),並將其添加到佈局。

但是,這些想法都不起作用。

有什麼建議嗎?

回答

0

我認爲它應該足以調用連接到TableContainer上的addContainerProperty。這樣做應該將PropertySetChangeEvent發送到表格。

除非,當然,如果您使用Table.setVisibleColumns限制了可見列。

如果這不能幫到你,一段代碼可以幫助解決問題。

0

如果MyContainer擴展了IndexedContainer,那麼您就有了完全的自由;只是作爲一個樣本,我統計過這簡直是(動態)地圖連載中的ZooKeeper,並myContainer中聽飼養員的變化:

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(); 
     ... 
    } 

當我們添加新的(鍵,值)對到地圖,我們會得到新自動列,其中「key」是列標題,「value」是單元格值。沒有必要叫「火」;它將由IndexedContainer實現自動調用(檢查源)。