2016-11-29 50 views
1

我使用兩個表格,第一個包含「團隊」,第二個「團隊成員」,並基於第一個表格選項進行填充。我還根據選擇顯示了各種統計數據,無論是團隊還是特定成員。如果沒有選擇成員,則顯示團隊統計信息,否則顯示成員統計信息。攔截表格項目上單擊事件的最佳方法

我在表格上使用ItemChangeListeners來重繪統計數據,但是這阻止我點擊已選擇的團隊以從該團隊中「取消選定」選定的成員,因爲在該情況下沒有事件被觸發。作爲一種解決方案,我還在Team表上使用了一個ClickListener,但是它似乎只在單擊該單詞時才起作用(而不是在整個單元上工作)

teamsTable.setClickListener("name", new Table.CellClickListener() { 
     @Override 
     public void onClick(Entity item, String columnId) { 
      if (teamsDs.getItem() == item) { 
       teamsDs.setItem(null); 
       teamsDs.setItem((Team) item); 
      } else { 
       teamsDs.setItem((Team) item); 
       teamsTable.setSelected((Team) item); 
      } 
     } 
    }); 

有沒有更好的方法來捕捉表格單元格上的點擊?還是有更好的方法來解決這個問題嗎?

+0

我以前見過「隻字不全」的東西。嘗試在元素上放置背景顏色和/或寬度高度(如果可能)。 –

+0

Table.CellClickListener旨在僅處理文本點擊。 您是否嘗試使用Ctrl +單擊取消選擇表格中的行?在這種情況下,CollectionDatasource應該觸發ItemChange事件。 – jreznot

+0

實際上,我需要通過單擊已經選擇的表格元素來取消選擇另一個表格(和數據源)中的元素,所以我正在尋找單元格單擊事件(如果可能的話) – gmlion

回答

2

由於CUBA表是Vaadin表的包裝,你可以從Vaadin使用ItemClickListener與CUBA表:

public class DemoScreen extends AbstractWindow { 
    @Inject 
    private Table<User> usersTable; 

    @Override 
    public void init(Map<String, Object> params) { 
     super.init(params); 

     com.vaadin.ui.Table vTable = usersTable.unwrap(com.vaadin.ui.Table.class); 
     vTable.addItemClickListener((ItemClickEvent.ItemClickListener) event -> 
       showNotification("Item " + event.getItemId()) 
     ); 
    } 
} 

它將你點擊表格單元格每次被解僱。

相關問題