截取表项目上的click事件的最佳方法

时间:2016-11-29 11:19:37

标签: cuba-platform

我正在使用两个表,第一个包含“团队”,第二个包含“团队成员”,并根据第一个表选择进行填充。我也根据选择显示各种统计数据,无论是团队还是特定成员。如果未选择任何成员,则会显示团队统计信息,否则将显示成员统计信息。

我在表格上使用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);
            }
        }
    });

有没有更好的方法来捕获表格单元格上的点击?或者有更好的方法来解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

由于CUBA Table是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())
        );
    }
}

每次单击表格单元格时都会触发。